Compare commits
No commits in common. "main" and "469ba567" have entirely different histories.
147 changed files with 1401 additions and 7002 deletions
1
.envrc
1
.envrc
|
@ -1 +0,0 @@
|
||||||
use flake
|
|
|
@ -1,2 +0,0 @@
|
||||||
[core]
|
|
||||||
hooksPath = .hooks
|
|
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1,4 +1 @@
|
||||||
result
|
result
|
||||||
.direnv
|
|
||||||
.vscode/*
|
|
||||||
!.vscode/settings.json
|
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
||||||
[submodule "secrets"]
|
|
||||||
path = secrets
|
|
||||||
url = git@git.jan-leila.com:jan-leila/nix-config-secrets.git
|
|
|
@ -1,6 +0,0 @@
|
||||||
#!/usr/bin/env nix-shell
|
|
||||||
#! nix-shell -i bash ../shell.nix
|
|
||||||
|
|
||||||
echo "restoring stashed changes"
|
|
||||||
|
|
||||||
git stash pop -q
|
|
|
@ -1,22 +0,0 @@
|
||||||
#!/usr/bin/env nix-shell
|
|
||||||
#! nix-shell -i bash ../shell.nix
|
|
||||||
|
|
||||||
echo "stashing all uncommitted changes"
|
|
||||||
git stash -q --keep-index
|
|
||||||
|
|
||||||
echo "checking flakes all compile"
|
|
||||||
nix flake check
|
|
||||||
|
|
||||||
if [ ! $? -eq 0 ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "running linter"
|
|
||||||
alejandra -q .
|
|
||||||
|
|
||||||
RESULT=$?
|
|
||||||
|
|
||||||
echo "adding lint changes to commit"
|
|
||||||
git add -u
|
|
||||||
|
|
||||||
exit $RESULT
|
|
14
.sops.yaml
14
.sops.yaml
|
@ -1,19 +1,7 @@
|
||||||
keys:
|
keys:
|
||||||
- &leyla age15ga3jmn2mqtlgwwtdcdh6l5vdx6um9aftrkexxfyue6xvcqapqusle75jh
|
- &leyla age15ga3jmn2mqtlgwwtdcdh6l5vdx6um9aftrkexxfyue6xvcqapqusle75jh
|
||||||
creation_rules:
|
creation_rules:
|
||||||
- path_regex: secrets/user-passwords.yaml$
|
- path_regex: secrets/secrets.yaml$
|
||||||
key_groups:
|
key_groups:
|
||||||
- age:
|
- age:
|
||||||
- *leyla
|
- *leyla
|
||||||
- path_regex: secrets/defiant-services.yaml$
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *leyla
|
|
||||||
- path_regex: secrets/vpn-keys.yaml$
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *leyla
|
|
||||||
- path_regex: secrets/application-keys.yaml$
|
|
||||||
key_groups:
|
|
||||||
- age:
|
|
||||||
- *leyla
|
|
21
.vscode/settings.json
vendored
21
.vscode/settings.json
vendored
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
"cSpell.words": [
|
|
||||||
"attrsets",
|
|
||||||
"bitwarden",
|
|
||||||
"forgejo",
|
|
||||||
"gids",
|
|
||||||
"headscale",
|
|
||||||
"hesperium",
|
|
||||||
"jellyfin",
|
|
||||||
"macvlan",
|
|
||||||
"nextcloud",
|
|
||||||
"nixos",
|
|
||||||
"nixpkgs",
|
|
||||||
"pihole",
|
|
||||||
"pkgs",
|
|
||||||
"rpool",
|
|
||||||
"searx",
|
|
||||||
"ublock",
|
|
||||||
"uids"
|
|
||||||
]
|
|
||||||
}
|
|
84
README.md
84
README.md
|
@ -1,9 +1,3 @@
|
||||||
# nix-config
|
|
||||||
|
|
||||||
https://git.jan-leila.com/jan-leila/nix-config
|
|
||||||
|
|
||||||
nix multi user, multi system, configuration with `sops` secret management, `home-manager`, and `nixos-anywhere` setup via `disko` with `zfs` + `impermanence`
|
|
||||||
|
|
||||||
# Hosts
|
# Hosts
|
||||||
|
|
||||||
## Host Map
|
## Host Map
|
||||||
|
@ -11,60 +5,62 @@ nix multi user, multi system, configuration with `sops` secret management, `home
|
||||||
| :---------: | :------------------------: | :--------------: | :-------: |
|
| :---------: | :------------------------: | :--------------: | :-------: |
|
||||||
| `twilight` | Desktop Computer | Leyla | Desktop |
|
| `twilight` | Desktop Computer | Leyla | Desktop |
|
||||||
| `horizon` | 13 inch Framework Laptop | Leyla | Laptop |
|
| `horizon` | 13 inch Framework Laptop | Leyla | Laptop |
|
||||||
| `defiant` | NAS Server | Leyla | Server |
|
| `defiant` | NAS Server | Leyla | Service |
|
||||||
| `hesperium` | Mac | ????? | ??? |
|
| `emergent` | Desktop Computer | Eve | Laptop |
|
||||||
| `emergent` | Desktop Computer | Eve | Desktop |
|
| `threshold` | Laptop | Eve | Desktop |
|
||||||
| `threshold` | Laptop | Eve | Laptop |
|
|
||||||
| `wolfram` | Steam Deck | House | Handheld |
|
|
||||||
| `ceder` | A5 Tablet (not using nix) | Leyla | Tablet |
|
|
||||||
| `skate` | A6 Tablet (not using nix) | Leyla | Tablet |
|
|
||||||
| `shale` | A6 Tablet (not using nix) | Eve | Tablet |
|
|
||||||
| `coven` | Pixel 8 (not using nix) | Leyla | Android |
|
|
||||||
|
|
||||||
# Tooling
|
|
||||||
## Rebuilding
|
### Rebuild current machine to match target host:
|
||||||
|
`sudo nixos-rebuild switch --flake .#hostname`
|
||||||
|
|
||||||
|
### Rebuild current machine maintaining current target
|
||||||
`./rebuild.sh`
|
`./rebuild.sh`
|
||||||
|
|
||||||
## Updating
|
# New machine setup
|
||||||
`nix flake update`
|
keys for decrypting password secrets for each users located at `/var/lib/sops-nix/key.txt`
|
||||||
|
|
||||||
|
updating passwords: `sops secrets/secrets.yaml`
|
||||||
|
|
||||||
## New host setup
|
|
||||||
`./install.sh --target 192.168.1.130 --flake hostname`
|
`./install.sh --target 192.168.1.130 --flake hostname`
|
||||||
|
|
||||||
## Updating Secrets
|
> how the current config was set up https://www.youtube.com/watch?v=G5f6GC7SnhU
|
||||||
`sops secrets/secrets_file_here.yaml`
|
|
||||||
|
|
||||||
## Inspecting a configuration
|
> something about ssh keys for remotes
|
||||||
`nix-inspect -p .`
|
|
||||||
|
|
||||||
# Notes:
|
# Notes:
|
||||||
|
- Look into this for fixing nixos-anywhere `https://github.com/lucidph3nx/nixos-config/tree/main`
|
||||||
## Research topics
|
- Look into this for rotating sops keys `https://technotim.live/posts/rotate-sops-encryption-keys/`
|
||||||
- Look into this for auto rotating sops keys `https://technotim.live/posts/rotate-sops-encryption-keys/`
|
- Look into this for openssh known configurations https://search.nixos.org/options?channel=unstable&from=0&size=15&sort=alpha_asc&type=packages&query=services.openssh
|
||||||
- Look into this for flake templates https://nix.dev/manual/nix/2.22/command-ref/new-cli/nix3-flake-init
|
- Look into this for flake templates https://nix.dev/manual/nix/2.22/command-ref/new-cli/nix3-flake-init
|
||||||
- https://nixos-and-flakes.thiscute.world/
|
- Look into this for headscale https://carlosvaz.com/posts/setting-up-headscale-on-nixos/
|
||||||
|
|
||||||
|
# Updating
|
||||||
|
`nix flake update`
|
||||||
|
|
||||||
# Tasks:
|
# Tasks:
|
||||||
|
|
||||||
## Tech Debt
|
## Tech Debt
|
||||||
- monitor configuration in `~/.config/monitors.xml` should be sym linked to `/run/gdm/.config/monitors.xml` (https://www.reddit.com/r/NixOS/comments/u09cz9/home_manager_create_my_own_symlinks_automatically/)
|
- allowUnfree should be enabled user side not host side (this isn't enabled at all right now for some reason???)
|
||||||
- syncthing folder passwords
|
- Move configs for pipe mouse, open rgb, and via keyboard to hardware config and install users side from those configs
|
||||||
- nfs export should be backed by the same values for server and client
|
- have nfs binds and exports defined by same code
|
||||||
|
- move services from defiant into own flake
|
||||||
|
- made base domain in nas services configurable
|
||||||
|
- vscode extensions should be in own flake (make sure to add the nixpkgs.overlays in it too)
|
||||||
## New Features
|
## New Features
|
||||||
|
- GNOME default monitors per hardware configuration?
|
||||||
- offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs)
|
- offline access for nfs mounts (overlay with rsync might be a good option here? https://www.spinics.net/lists/linux-unionfs/msg07105.html note about nfs4 and overlay fs)
|
||||||
- samba mounts
|
- Flake templates
|
||||||
|
- Docker parity with existing NAS on defiant
|
||||||
|
- NFS on defiant
|
||||||
|
- firefox declarative???
|
||||||
- figure out steam vr things?
|
- figure out steam vr things?
|
||||||
- Open GL?
|
- Open GL?
|
||||||
|
- util functions
|
||||||
|
- openssh known hosts
|
||||||
|
- limit boot configurations to 2 on defiant
|
||||||
- rotate sops encryption keys periodically (and somehow sync between devices?)
|
- rotate sops encryption keys periodically (and somehow sync between devices?)
|
||||||
- zfs email after scrubbing # TODO: test this
|
- zfs email after scrubbing
|
||||||
- wake on LAN for updates
|
- headscale server
|
||||||
- ISO target that contains authorized keys for nixos-anywhere https://github.com/diegofariasm/yggdrasil/blob/4acc43ebc7bcbf2e41376d14268e382007e94d78/hosts/bootstrap/default.nix
|
- mastodon server
|
||||||
- zfs encryption FIDO2 2fa (look into shavee)
|
- tail scale clients
|
||||||
- Secure Boot - https://github.com/nix-community/lanzaboote
|
- wake on LAN
|
||||||
- SMART test with email results
|
|
||||||
- Create Tor guard/relay server
|
|
||||||
- remote distributed builds - https://nix.dev/tutorials/nixos/distributed-builds-setup.html
|
|
||||||
- migrate away from flakes and move to npins
|
|
||||||
- fix nfs
|
|
||||||
- fix home assistant
|
|
||||||
- create adguard server
|
|
|
@ -1,30 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
--flake*|-f*)
|
|
||||||
if [[ "$1" != *=* ]]; then shift; fi
|
|
||||||
flake="${1#*=}"
|
|
||||||
;;
|
|
||||||
# --user*|-u*)
|
|
||||||
# if [[ "$1" != *=* ]]; then shift; fi
|
|
||||||
# user="${1#*=}"
|
|
||||||
# ;;
|
|
||||||
--help|-h)
|
|
||||||
echo "--help -h: print this message"
|
|
||||||
echo "--flake -f: set the flake to build an installer for"
|
|
||||||
# echo "--user -u: set the user to install flake as on the target system"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Error: Invalid argument $1"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
flake=${flake:-"basic"}
|
|
||||||
user=${user:-$USER}
|
|
||||||
|
|
||||||
nix build .#installerConfigurations.$flake.config.system.build.isoImage
|
|
|
@ -1,16 +0,0 @@
|
||||||
{...}: {
|
|
||||||
host = {
|
|
||||||
users = {
|
|
||||||
leyla = {
|
|
||||||
isDesktopUser = true;
|
|
||||||
isTerminalUser = true;
|
|
||||||
isPrincipleUser = true;
|
|
||||||
};
|
|
||||||
eve.isNormalUser = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
system.stateVersion = 5;
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = "aarch64-darwin";
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./configuration.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
users = config.host.users;
|
|
||||||
in {
|
|
||||||
leyla = lib.mkIf users.leyla.isNormalUser (import ./leyla);
|
|
||||||
eve = lib.mkIf users.eve.isNormalUser (import ./eve);
|
|
||||||
git = lib.mkIf (osConfig.services.forgejo.enable or false) (import ./git);
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
{osConfig, ...}: let
|
|
||||||
userConfig = osConfig.host.users.eve;
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
./packages.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
home = {
|
|
||||||
username = userConfig.name;
|
|
||||||
homeDirectory = osConfig.users.users.eve.home;
|
|
||||||
|
|
||||||
# This value determines the Home Manager release that your configuration is
|
|
||||||
# compatible with. This helps avoid breakage when a new Home Manager release
|
|
||||||
# introduces backwards incompatible changes.
|
|
||||||
#
|
|
||||||
# You should not change this value, even if you update Home Manager. If you do
|
|
||||||
# want to update the value, then make sure to first check the Home Manager
|
|
||||||
# release notes.
|
|
||||||
stateVersion = "23.11"; # Please read the comment before changing.
|
|
||||||
|
|
||||||
# Home Manager is pretty good at managing dotfiles. The primary way to manage
|
|
||||||
# plain files is through 'home.file'.
|
|
||||||
file = {
|
|
||||||
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
|
|
||||||
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
|
|
||||||
# # symlink to the Nix store copy.
|
|
||||||
# ".screenrc".source = dotfiles/screenrc;
|
|
||||||
|
|
||||||
# # You can also set the file content immediately.
|
|
||||||
# ".gradle/gradle.properties".text = ''
|
|
||||||
# org.gradle.console=verbose
|
|
||||||
# org.gradle.daemon.idletimeout=3600000
|
|
||||||
# '';
|
|
||||||
};
|
|
||||||
|
|
||||||
# Home Manager can also manage your environment variables through
|
|
||||||
# 'home.sessionVariables'. If you don't want to manage your shell through Home
|
|
||||||
# Manager then you have to manually source 'hm-session-vars.sh' located at
|
|
||||||
# either
|
|
||||||
#
|
|
||||||
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
|
|
||||||
#
|
|
||||||
# or
|
|
||||||
#
|
|
||||||
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
|
|
||||||
#
|
|
||||||
# or
|
|
||||||
#
|
|
||||||
# /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh
|
|
||||||
#
|
|
||||||
sessionVariables = {
|
|
||||||
# EDITOR = "emacs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
userConfig = osConfig.host.users.eve;
|
|
||||||
hardware = osConfig.host.hardware;
|
|
||||||
in {
|
|
||||||
config = {
|
|
||||||
nixpkgs.config = {
|
|
||||||
allowUnfree = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Packages that can be installed without any extra configuration
|
|
||||||
# See https://search.nixos.org/packages for all options
|
|
||||||
home.packages = lib.lists.optionals userConfig.isDesktopUser (
|
|
||||||
with pkgs; [
|
|
||||||
ungoogled-chromium
|
|
||||||
(lib.mkIf hardware.piperMouse.enable piper)
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
# Packages that need to be installed with some extra configuration
|
|
||||||
# See https://home-manager-options.extranix.com/ for all options
|
|
||||||
programs = lib.mkMerge [
|
|
||||||
{
|
|
||||||
# Let Home Manager install and manage itself.
|
|
||||||
home-manager.enable = true;
|
|
||||||
}
|
|
||||||
(lib.mkIf (config.user.isDesktopUser || config.user.isTerminalUser) {
|
|
||||||
git = {
|
|
||||||
enable = true;
|
|
||||||
userName = "Eve";
|
|
||||||
userEmail = "evesnrobins@gmail.com";
|
|
||||||
extraConfig.init.defaultBranch = "main";
|
|
||||||
};
|
|
||||||
|
|
||||||
openssh = {
|
|
||||||
enable = true;
|
|
||||||
hostKeys = [
|
|
||||||
{
|
|
||||||
type = "ed25519";
|
|
||||||
path = "${config.home.username}_${osConfig.networking.hostName}_ed25519";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
})
|
|
||||||
(lib.mkIf config.user.isDesktopUser {
|
|
||||||
vscode = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.vscodium;
|
|
||||||
};
|
|
||||||
|
|
||||||
firefox.enable = true;
|
|
||||||
bitwarden.enable = true;
|
|
||||||
discord.enable = true;
|
|
||||||
makemkv.enable = true;
|
|
||||||
signal-desktop-bin.enable = true;
|
|
||||||
steam.enable = true;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
{osConfig, ...}: {
|
|
||||||
home = {
|
|
||||||
username = osConfig.users.users.git.name;
|
|
||||||
homeDirectory = osConfig.users.users.git.home;
|
|
||||||
|
|
||||||
# This value determines the Home Manager release that your configuration is
|
|
||||||
# compatible with. This helps avoid breakage when a new Home Manager release
|
|
||||||
# introduces backwards incompatible changes.
|
|
||||||
#
|
|
||||||
# You should not change this value, even if you update Home Manager. If you do
|
|
||||||
# want to update the value, then make sure to first check the Home Manager
|
|
||||||
# release notes.
|
|
||||||
stateVersion = "23.11"; # Please read the comment before changing.
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.ssh.extraConfig = ''
|
|
||||||
AuthorizedKeysFile
|
|
||||||
/var/lib/forgejo/.ssh/authorized_keys
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,104 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
config = {
|
|
||||||
dconf = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
"org/gnome/desktop/interface".color-scheme = "prefer-dark";
|
|
||||||
|
|
||||||
"org/gnome/desktop/wm/preferences".button-layout = ":minimize,maximize,close";
|
|
||||||
|
|
||||||
"org/gnome/shell" = {
|
|
||||||
disable-user-extensions = false; # enables user extensions
|
|
||||||
enabled-extensions = [
|
|
||||||
# Put UUIDs of extensions that you want to enable here.
|
|
||||||
# If the extension you want to enable is packaged in nixpkgs,
|
|
||||||
# you can easily get its UUID by accessing its extensionUuid
|
|
||||||
# field (look at the following example).
|
|
||||||
pkgs.gnomeExtensions.dash-to-dock.extensionUuid
|
|
||||||
|
|
||||||
# Alternatively, you can manually pass UUID as a string.
|
|
||||||
# "dash-to-dock@micxgx.gmail.com"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/shell/extensions/dash-to-dock" = {
|
|
||||||
"dock-position" = "LEFT";
|
|
||||||
"intellihide-mode" = "ALL_WINDOWS";
|
|
||||||
"show-trash" = false;
|
|
||||||
"require-pressure-to-show" = false;
|
|
||||||
"show-mounts" = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/settings-daemon/plugins/media-keys" = {
|
|
||||||
custom-keybindings = [
|
|
||||||
"/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
|
|
||||||
binding = "<Super>t";
|
|
||||||
command = "kgx";
|
|
||||||
name = "Open Terminal";
|
|
||||||
};
|
|
||||||
|
|
||||||
"org/gnome/shell" = {
|
|
||||||
favorite-apps = ["org.gnome.Nautilus.desktop" "firefox.desktop" "codium.desktop" "steam.desktop" "org.gnome.Console.desktop"];
|
|
||||||
# app-picker-layout =
|
|
||||||
# builtins.map (
|
|
||||||
# applications:
|
|
||||||
# lib.hm.gvariant (builtins.listToAttrs (lib.lists.imap0 (i: v: lib.attrsets.nameValuePair v (lib.hm.gvariant.mkVariant "{'position': <${i}>}")) applications))
|
|
||||||
# ) [
|
|
||||||
# [
|
|
||||||
# "org.gnome.Nautilus.desktop"
|
|
||||||
# "bitwarden.desktop"
|
|
||||||
# "firefox.desktop"
|
|
||||||
# "torbrowser.desktop"
|
|
||||||
# "chromium-browser.desktop"
|
|
||||||
# "codium.desktop"
|
|
||||||
# "idea-community.desktop"
|
|
||||||
# "org.gnome.TextEditor.desktop"
|
|
||||||
# "dbeaver.desktop"
|
|
||||||
# "bruno.desktop"
|
|
||||||
# "anki.desktop"
|
|
||||||
# "obsidian.desktop"
|
|
||||||
# "signal-desktop.desktop"
|
|
||||||
# "discord.desktop"
|
|
||||||
# "gimp.desktop"
|
|
||||||
# "org.inkscape.Inkscape.desktop"
|
|
||||||
# "org.kde.krita.desktop"
|
|
||||||
# "davinci-resolve.desktop"
|
|
||||||
# "com.obsproject.Studio.desktop"
|
|
||||||
# "org.freecad.FreeCAD.desktop"
|
|
||||||
# "makemkv.desktop"
|
|
||||||
# "easytag.desktop"
|
|
||||||
# "transmission-gtk.desktop"
|
|
||||||
# ]
|
|
||||||
# [
|
|
||||||
# "SteamVR.desktop"
|
|
||||||
# "Beat Saber.desktop"
|
|
||||||
# "Noun Town.desktop"
|
|
||||||
# "WEBFISHING.desktop"
|
|
||||||
# "Factorio.desktop"
|
|
||||||
# ]
|
|
||||||
# [
|
|
||||||
# "org.gnome.Settings.desktop"
|
|
||||||
# "org.gnome.SystemMonitor.desktop"
|
|
||||||
# "org.gnome.Snapshot.desktop"
|
|
||||||
# "org.gnome.Usage.desktop"
|
|
||||||
# "org.gnome.DiskUtility.desktop"
|
|
||||||
# "org.gnome.Evince.desktop"
|
|
||||||
# "org.gnome.fonts.desktop"
|
|
||||||
# "noisetorch.desktop"
|
|
||||||
# "nvidia-settings.desktop"
|
|
||||||
# "OpnRGB.desktop"
|
|
||||||
# "org.freedesktop.Piper.desktop"
|
|
||||||
# "via-nativia.desktop"
|
|
||||||
# "protonvpn-app.desktop"
|
|
||||||
# "simple-scan.desktop"
|
|
||||||
# ]
|
|
||||||
# ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,112 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
./packages
|
|
||||||
./i18n.nix
|
|
||||||
./impermanence.nix
|
|
||||||
./dconf.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
config = {
|
|
||||||
# Home Manager needs a bit of information about you and the paths it should
|
|
||||||
# manage.
|
|
||||||
home = {
|
|
||||||
username = osConfig.host.users.leyla.name;
|
|
||||||
homeDirectory = osConfig.users.users.leyla.home;
|
|
||||||
|
|
||||||
# This value determines the Home Manager release that your configuration is
|
|
||||||
# compatible with. This helps avoid breakage when a new Home Manager release
|
|
||||||
# introduces backwards incompatible changes.
|
|
||||||
#
|
|
||||||
# You should not change this value, even if you update Home Manager. If you do
|
|
||||||
# want to update the value, then make sure to first check the Home Manager
|
|
||||||
# release notes.
|
|
||||||
stateVersion = "23.11"; # Please read the comment before changing.
|
|
||||||
|
|
||||||
# Home Manager is pretty good at managing dotfiles. The primary way to manage
|
|
||||||
# plain files is through 'home.file'.
|
|
||||||
file = {
|
|
||||||
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
|
|
||||||
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
|
|
||||||
# # symlink to the Nix store copy.
|
|
||||||
# ".screenrc".source = dotfiles/screenrc;
|
|
||||||
|
|
||||||
# # You can also set the file content immediately.
|
|
||||||
# ".gradle/gradle.properties".text = ''
|
|
||||||
# org.gradle.console=verbose
|
|
||||||
# org.gradle.daemon.idletimeout=3600000
|
|
||||||
# '';
|
|
||||||
"${config.xdg.configHome}/user-dirs.dirs" = {
|
|
||||||
force = true;
|
|
||||||
text = ''
|
|
||||||
# This file is written by xdg-user-dirs-update
|
|
||||||
# If you want to change or add directories, just edit the line you're
|
|
||||||
# interested in. All local changes will be retained on the next run.
|
|
||||||
# Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped
|
|
||||||
# homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an
|
|
||||||
# absolute path. No other format is supported.
|
|
||||||
#
|
|
||||||
XDG_DESKTOP_DIR="$HOME/desktop"
|
|
||||||
XDG_DOWNLOAD_DIR="$HOME/downloads"
|
|
||||||
XDG_DOCUMENTS_DIR="$HOME/documents"
|
|
||||||
XDG_TEMPLATES_DIR="$HOME/documents/templates"
|
|
||||||
XDG_MUSIC_DIR="$HOME/documents/music"
|
|
||||||
XDG_PICTURES_DIR="$HOME/documents/photos"
|
|
||||||
XDG_VIDEOS_DIR="$HOME/documents/videos"
|
|
||||||
XDG_PUBLICSHARE_DIR="$HOME/documents/public"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
keyboard.layout = "us,it,de";
|
|
||||||
|
|
||||||
# Home Manager can also manage your environment variables through
|
|
||||||
# 'home.sessionVariables'. If you don't want to manage your shell through Home
|
|
||||||
# Manager then you have to manually source 'hm-session-vars.sh' located at
|
|
||||||
# either
|
|
||||||
#
|
|
||||||
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
|
|
||||||
#
|
|
||||||
# or
|
|
||||||
#
|
|
||||||
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
|
|
||||||
#
|
|
||||||
# or
|
|
||||||
#
|
|
||||||
# /etc/profiles/per-user/leyla/etc/profile.d/hm-session-vars.sh
|
|
||||||
#
|
|
||||||
sessionVariables = {
|
|
||||||
# EDITOR = "emacs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
user = {
|
|
||||||
continue = {
|
|
||||||
enable = true;
|
|
||||||
docs = {
|
|
||||||
"Continue Docs" = {
|
|
||||||
startUrl = "https://docs.continue.dev";
|
|
||||||
};
|
|
||||||
"Nixpkgs" = {
|
|
||||||
startUrl = "https://ryantm.github.io/nixpkgs/#preface";
|
|
||||||
};
|
|
||||||
"Nix Manual" = {
|
|
||||||
startUrl = "https://nixos.org/manual/nixos/stable/";
|
|
||||||
};
|
|
||||||
"Home manager Manual" = {
|
|
||||||
startUrl = "https://nix-community.github.io/home-manager/";
|
|
||||||
};
|
|
||||||
"Nix Docs" = {
|
|
||||||
startUrl = "https://nix.dev/index.html";
|
|
||||||
};
|
|
||||||
"Linux Man Page" = {
|
|
||||||
startUrl = "https://linux.die.net/man/";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
{...}: {
|
|
||||||
i18n = {
|
|
||||||
defaultLocale = "en_IE.UTF-8";
|
|
||||||
|
|
||||||
extraLocaleSettings = {
|
|
||||||
# LC_ADDRESS = "en_IE.UTF-8"; # lets just get used to this one now
|
|
||||||
# LC_TELEPHONE = "en_IE.UTF-8"; # lets just get used to this one now
|
|
||||||
LC_MONETARY = "en_US.UTF-8"; # to be changed once I move
|
|
||||||
LC_PAPER = "en_US.UTF-8"; # convenient for american printers until I move
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
config = lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist/home/leyla" = {
|
|
||||||
directories = [
|
|
||||||
"desktop"
|
|
||||||
"downloads"
|
|
||||||
"documents"
|
|
||||||
];
|
|
||||||
files = [
|
|
||||||
".bash_history" # keep shell history around
|
|
||||||
"${config.xdg.dataHome}/recently-used.xbel" # gnome recently viewed files
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,118 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
hardware = osConfig.host.hardware;
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
./vscode
|
|
||||||
./firefox.nix
|
|
||||||
./direnv.nix
|
|
||||||
./openssh.nix
|
|
||||||
./git.nix
|
|
||||||
./makemkv.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
config = lib.mkMerge [
|
|
||||||
{
|
|
||||||
programs = lib.mkMerge [
|
|
||||||
{
|
|
||||||
# Let Home Manager install and manage itself.
|
|
||||||
home-manager.enable = true;
|
|
||||||
}
|
|
||||||
(lib.mkIf (config.user.isTerminalUser || config.user.isDesktopUser) {
|
|
||||||
bash.enable = true;
|
|
||||||
git.enable = true;
|
|
||||||
openssh.enable = true;
|
|
||||||
})
|
|
||||||
(lib.mkIf config.user.isDesktopUser {
|
|
||||||
bitwarden.enable = true;
|
|
||||||
obs-studio.enable = hardware.graphicsAcceleration.enable;
|
|
||||||
qbittorrent.enable = true;
|
|
||||||
prostudiomasters.enable = true;
|
|
||||||
protonvpn-gui.enable = true;
|
|
||||||
dbeaver-bin.enable = true;
|
|
||||||
bruno.enable = true;
|
|
||||||
})
|
|
||||||
(lib.mkIf (hardware.directAccess.enable && config.user.isDesktopUser) {
|
|
||||||
anki.enable = true;
|
|
||||||
makemkv.enable = true;
|
|
||||||
discord.enable = true;
|
|
||||||
signal-desktop-bin.enable = true;
|
|
||||||
calibre.enable = true;
|
|
||||||
obsidian.enable = true;
|
|
||||||
jetbrains.idea-community.enable = true;
|
|
||||||
vscode.enable = true;
|
|
||||||
firefox.enable = true;
|
|
||||||
steam.enable = true;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(lib.mkIf config.user.isTerminalUser {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
# command line tools
|
|
||||||
sox
|
|
||||||
yt-dlp
|
|
||||||
ffmpeg
|
|
||||||
imagemagick
|
|
||||||
];
|
|
||||||
})
|
|
||||||
(lib.mkIf config.user.isDesktopUser {
|
|
||||||
nixpkgs.config = {
|
|
||||||
allowUnfree = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = (
|
|
||||||
(with pkgs; [
|
|
||||||
aileron
|
|
||||||
|
|
||||||
gnomeExtensions.dash-to-dock
|
|
||||||
|
|
||||||
proxmark3
|
|
||||||
])
|
|
||||||
++ (
|
|
||||||
lib.lists.optionals hardware.directAccess.enable (with pkgs; [
|
|
||||||
#foss platforms
|
|
||||||
ungoogled-chromium
|
|
||||||
libreoffice
|
|
||||||
inkscape
|
|
||||||
gimp
|
|
||||||
krita
|
|
||||||
freecad
|
|
||||||
# cura
|
|
||||||
# kicad-small
|
|
||||||
onionshare
|
|
||||||
# rhythmbox
|
|
||||||
|
|
||||||
# wireshark
|
|
||||||
# rpi-imager
|
|
||||||
# fritzing
|
|
||||||
mfoc
|
|
||||||
tor-browser
|
|
||||||
pdfarranger
|
|
||||||
picard
|
|
||||||
|
|
||||||
# proprietary platforms
|
|
||||||
(lib.mkIf hardware.graphicsAcceleration.enable davinci-resolve)
|
|
||||||
|
|
||||||
# development tools
|
|
||||||
# androidStudioPackages.canary
|
|
||||||
qFlipper
|
|
||||||
|
|
||||||
# system tools
|
|
||||||
openvpn
|
|
||||||
noisetorch
|
|
||||||
|
|
||||||
# hardware management tools
|
|
||||||
(lib.mkIf hardware.piperMouse.enable piper)
|
|
||||||
(lib.mkIf hardware.openRGB.enable openrgb)
|
|
||||||
(lib.mkIf hardware.viaKeyboard.enable via)
|
|
||||||
])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
userConfig = osConfig.host.users.leyla;
|
|
||||||
in {
|
|
||||||
config = lib.mkIf userConfig.isDesktopUser {
|
|
||||||
programs = {
|
|
||||||
direnv = {
|
|
||||||
enable = true;
|
|
||||||
enableBashIntegration = true;
|
|
||||||
nix-direnv.enable = true;
|
|
||||||
config = {
|
|
||||||
global.hide_env_diff = true;
|
|
||||||
whitelist.exact = ["${config.home.homeDirectory}/documents/code/nix-config"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,343 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
config = {
|
|
||||||
programs.firefox = {
|
|
||||||
profiles.leyla = {
|
|
||||||
settings = {
|
|
||||||
"browser.search.defaultenginename" = "Searx";
|
|
||||||
"browser.search.order.1" = "Searx";
|
|
||||||
};
|
|
||||||
|
|
||||||
search = {
|
|
||||||
force = true;
|
|
||||||
default = "Searx";
|
|
||||||
engines = {
|
|
||||||
"Nix Packages" = {
|
|
||||||
urls = [
|
|
||||||
{
|
|
||||||
template = "https://search.nixos.org/packages";
|
|
||||||
params = [
|
|
||||||
{
|
|
||||||
name = "type";
|
|
||||||
value = "packages";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "query";
|
|
||||||
value = "{searchTerms}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
|
||||||
definedAliases = ["@np"];
|
|
||||||
};
|
|
||||||
"NixOS Wiki" = {
|
|
||||||
urls = [{template = "https://nixos.wiki/index.php?search={searchTerms}";}];
|
|
||||||
icon = "https://nixos.wiki/favicon.png";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@nw"];
|
|
||||||
};
|
|
||||||
"Searx" = {
|
|
||||||
urls = [{template = "https://search.jan-leila.com/?q={searchTerms}";}];
|
|
||||||
icon = "https://nixos.wiki/favicon.png";
|
|
||||||
updateInterval = 24 * 60 * 60 * 1000; # every day
|
|
||||||
definedAliases = ["@searx"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
extensions.packages = with inputs.firefox-addons.packages.${pkgs.system}; [
|
|
||||||
bitwarden
|
|
||||||
terms-of-service-didnt-read
|
|
||||||
multi-account-containers
|
|
||||||
shinigami-eyes
|
|
||||||
|
|
||||||
ublock-origin
|
|
||||||
sponsorblock
|
|
||||||
dearrow
|
|
||||||
df-youtube
|
|
||||||
return-youtube-dislikes
|
|
||||||
|
|
||||||
privacy-badger
|
|
||||||
decentraleyes
|
|
||||||
clearurls
|
|
||||||
localcdn
|
|
||||||
|
|
||||||
snowflake
|
|
||||||
|
|
||||||
deutsch-de-language-pack
|
|
||||||
dictionary-german
|
|
||||||
|
|
||||||
# (
|
|
||||||
# buildFirefoxXpiAddon rec {
|
|
||||||
# pname = "italiano-it-language-pack";
|
|
||||||
# version = "132.0.20241110.231641";
|
|
||||||
# addonId = "langpack-it@firefox.mozilla.org";
|
|
||||||
# url = "https://addons.mozilla.org/firefox/downloads/file/4392453/italiano_it_language_pack-${version}.xpi";
|
|
||||||
# sha256 = "";
|
|
||||||
# meta = with lib;
|
|
||||||
# {
|
|
||||||
# description = "Firefox Language Pack for Italiano (it) – Italian";
|
|
||||||
# license = licenses.mpl20;
|
|
||||||
# mozPermissions = [];
|
|
||||||
# platforms = platforms.all;
|
|
||||||
# };
|
|
||||||
# }
|
|
||||||
# )
|
|
||||||
# (
|
|
||||||
# buildFirefoxXpiAddon rec {
|
|
||||||
# pname = "dizionario-italiano";
|
|
||||||
# version = "5.1";
|
|
||||||
# addonId = "it-IT@dictionaries.addons.mozilla.org";
|
|
||||||
# url = "https://addons.mozilla.org/firefox/downloads/file/1163874/dizionario_italiano-${version}.xpi";
|
|
||||||
# sha256 = "";
|
|
||||||
# meta = with lib;
|
|
||||||
# {
|
|
||||||
# description = "Add support for Italian to spellchecking";
|
|
||||||
# license = licenses.gpl3;
|
|
||||||
# mozPermissions = [];
|
|
||||||
# platforms = platforms.all;
|
|
||||||
# };
|
|
||||||
# }
|
|
||||||
# )
|
|
||||||
];
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
# Disable irritating first-run stuff
|
|
||||||
"browser.disableResetPrompt" = true;
|
|
||||||
"browser.download.panel.shown" = true;
|
|
||||||
"browser.feeds.showFirstRunUI" = false;
|
|
||||||
"browser.messaging-system.whatsNewPanel.enabled" = false;
|
|
||||||
"browser.rights.3.shown" = true;
|
|
||||||
"browser.shell.checkDefaultBrowser" = false;
|
|
||||||
"browser.shell.defaultBrowserCheckCount" = 1;
|
|
||||||
"browser.startup.homepage_override.mstone" = "ignore";
|
|
||||||
"browser.uitour.enabled" = false;
|
|
||||||
"startup.homepage_override_url" = "";
|
|
||||||
"trailhead.firstrun.didSeeAboutWelcome" = true;
|
|
||||||
"browser.bookmarks.restore_default_bookmarks" = false;
|
|
||||||
"browser.bookmarks.addedImportButton" = true;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
|
||||||
|
|
||||||
# Usage Experience
|
|
||||||
"browser.startup.homepage" = "about:home";
|
|
||||||
"browser.download.useDownloadDir" = false;
|
|
||||||
"browser.uiCustomization.state" = builtins.toJSON {
|
|
||||||
"currentVersion" = 20;
|
|
||||||
"newElementCount" = 6;
|
|
||||||
"dirtyAreaCache" = [
|
|
||||||
"nav-bar"
|
|
||||||
"PersonalToolbar"
|
|
||||||
"toolbar-menubar"
|
|
||||||
"TabsToolbar"
|
|
||||||
"unified-extensions-area"
|
|
||||||
"vertical-tabs"
|
|
||||||
];
|
|
||||||
"placements" = {
|
|
||||||
"widget-overflow-fixed-list" = [];
|
|
||||||
"unified-extensions-area" = [
|
|
||||||
"privacy_privacy_com-browser-action"
|
|
||||||
# bitwarden
|
|
||||||
"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"
|
|
||||||
"ublock0_raymondhill_net-browser-action"
|
|
||||||
"sponsorblocker_ajay_app-browser-action"
|
|
||||||
"dearrow_ajay_app-browser-action"
|
|
||||||
"jid1-mnnxcxisbpnsxq_jetpack-browser-action"
|
|
||||||
"_testpilot-containers-browser-action"
|
|
||||||
"addon_simplelogin-browser-action"
|
|
||||||
"_74145f27-f039-47ce-a470-a662b129930a_-browser-action"
|
|
||||||
"jid1-bofifl9vbdl2zq_jetpack-browser-action"
|
|
||||||
"dfyoutube_example_com-browser-action"
|
|
||||||
"_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action"
|
|
||||||
"_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action"
|
|
||||||
"_b11bea1f-a888-4332-8d8a-cec2be7d24b9_-browse-action"
|
|
||||||
"jid0-3guet1r69sqnsrca5p8kx9ezc3u_jetpack-browser-action"
|
|
||||||
];
|
|
||||||
"nav-bar" = [
|
|
||||||
"back-button"
|
|
||||||
"forward-button"
|
|
||||||
"stop-reload-button"
|
|
||||||
"urlbar-container"
|
|
||||||
"downloads-button"
|
|
||||||
"unified-extensions-button"
|
|
||||||
"reset-pbm-toolbar-button"
|
|
||||||
];
|
|
||||||
"toolbar-menubar" = [
|
|
||||||
"menubar-items"
|
|
||||||
];
|
|
||||||
"TabsToolbar" = [
|
|
||||||
"firefox-view-button"
|
|
||||||
"tabbrowser-tabs"
|
|
||||||
"new-tab-button"
|
|
||||||
"alltabs-button"
|
|
||||||
];
|
|
||||||
"vertical-tabs" = [];
|
|
||||||
"PersonalToolbar" = [
|
|
||||||
"import-button"
|
|
||||||
"personal-bookmarks"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
"seen" = [
|
|
||||||
"save-to-pocket-button"
|
|
||||||
"developer-button"
|
|
||||||
"privacy_privacy_com-browser-action"
|
|
||||||
"sponsorblocker_ajay_app-browser-action"
|
|
||||||
"ublock0_raymondhill_net-browser-action"
|
|
||||||
"addon_simplelogin-browser-action"
|
|
||||||
"dearrow_ajay_app-browser-action"
|
|
||||||
"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action"
|
|
||||||
"_74145f27-f039-47ce-a470-a662b129930a_-browser-action"
|
|
||||||
"jid1-bofifl9vbdl2zq_jetpack-browser-action"
|
|
||||||
"dfyoutube_example_com-browser-action"
|
|
||||||
"_testpilot-containers-browser-action"
|
|
||||||
"_b86e4813-687a-43e6-ab65-0bde4ab75758_-browser-action"
|
|
||||||
"jid1-mnnxcxisbpnsxq_jetpack-browser-action"
|
|
||||||
"_762f9885-5a13-4abd-9c77-433dcd38b8fd_-browser-action"
|
|
||||||
"_b11bea1f-a888-4332-8d8a-cec2be7d24b9_-browser-action"
|
|
||||||
"jid0-3guet1r69sqnsrca5p8kx9ezc3u_jetpack-browser-action"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
"browser.newtabpage.activity-stream.feeds.topsites" = false;
|
|
||||||
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
|
||||||
"browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false;
|
|
||||||
"browser.newtabpage.blocked" = lib.genAttrs [
|
|
||||||
# Facebook
|
|
||||||
"4gPpjkxgZzXPVtuEoAL9Ig=="
|
|
||||||
# Reddit
|
|
||||||
"gLv0ja2RYVgxKdp0I5qwvA=="
|
|
||||||
# Amazon
|
|
||||||
"K00ILysCaEq8+bEqV/3nuw=="
|
|
||||||
# Twitter
|
|
||||||
"T9nJot5PurhJSy8n038xGA=="
|
|
||||||
] (_: 1);
|
|
||||||
"identity.fxaccounts.enabled" = false;
|
|
||||||
|
|
||||||
# Security
|
|
||||||
"privacy.trackingprotection.enabled" = true;
|
|
||||||
"dom.security.https_only_mode" = true;
|
|
||||||
|
|
||||||
"extensions.formautofill.addresses.enabled" = false;
|
|
||||||
"extensions.formautofill.creditCards.enabled" = false;
|
|
||||||
"signon.rememberSignons" = false;
|
|
||||||
"privacy.sanitize.sanitizeOnShutdown" = true;
|
|
||||||
"privacy.clearOnShutdown_v2.cache" = true;
|
|
||||||
"privacy.clearOnShutdown_v2.cookiesAndStorage" = true;
|
|
||||||
"privacy.clearOnShutdown_v2.historyFormDataAndDownloads" = true;
|
|
||||||
"urlclassifier.trackingSkipURLs" = "";
|
|
||||||
"urlclassifier.features.socialtracking.skipURLs" = "";
|
|
||||||
"dom.security.https_only_mode_pbm" = true;
|
|
||||||
"dom.security.https_only_mode_error_page_user_suggestions" = true;
|
|
||||||
|
|
||||||
# Disable telemetry
|
|
||||||
"app.shield.optoutstudies.enabled" = false;
|
|
||||||
"browser.discovery.enabled" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
|
|
||||||
"browser.newtabpage.activity-stream.telemetry" = false;
|
|
||||||
"browser.ping-centre.telemetry" = false;
|
|
||||||
"datareporting.healthreport.service.enabled" = false;
|
|
||||||
"datareporting.healthreport.uploadEnabled" = false;
|
|
||||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
|
||||||
"datareporting.sessions.current.clean" = true;
|
|
||||||
"devtools.onboarding.telemetry.logged" = false;
|
|
||||||
"toolkit.telemetry.archive.enabled" = false;
|
|
||||||
"toolkit.telemetry.bhrPing.enabled" = false;
|
|
||||||
"toolkit.telemetry.enabled" = false;
|
|
||||||
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
|
||||||
"toolkit.telemetry.hybridContent.enabled" = false;
|
|
||||||
"toolkit.telemetry.newProfilePing.enabled" = false;
|
|
||||||
"toolkit.telemetry.prompted" = 2;
|
|
||||||
"toolkit.telemetry.rejected" = true;
|
|
||||||
"toolkit.telemetry.reportingpolicy.firstRun" = false;
|
|
||||||
"toolkit.telemetry.server" = "";
|
|
||||||
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
|
||||||
"toolkit.telemetry.unified" = false;
|
|
||||||
"toolkit.telemetry.unifiedIsOptIn" = false;
|
|
||||||
"toolkit.telemetry.updatePing.enabled" = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
bookmarks = {
|
|
||||||
force = true;
|
|
||||||
settings = [
|
|
||||||
{
|
|
||||||
name = "Media";
|
|
||||||
url = "https://media.jan-leila.com/";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Photos";
|
|
||||||
url = "https://photos.jan-leila.com";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Git";
|
|
||||||
url = "https://git.jan-leila.com/";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Home Automation";
|
|
||||||
url = "https://home.jan-leila.com/";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Mail";
|
|
||||||
url = "https://mail.protonmail.com";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Open Street Map";
|
|
||||||
url = "https://www.openstreetmap.org/";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Password Manager";
|
|
||||||
url = "https://vault.bitwarden.com/";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Mastodon";
|
|
||||||
url = "https://mspsocial.net";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Linked In";
|
|
||||||
url = "https://www.linkedin.com/";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "Job Search";
|
|
||||||
url = "https://www.jobsinnetwork.com/?state=cleaned_history&language%5B%5D=en&query=react&locations.countryCode%5B%5D=IT&locations.countryCode%5B%5D=DE&locations.countryCode%5B%5D=NL&experience%5B%5D=medior&experience%5B%5D=junior&page=1";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "React Docs";
|
|
||||||
url = "https://react.dev/";
|
|
||||||
keyword = "";
|
|
||||||
tags = [""];
|
|
||||||
}
|
|
||||||
# Template
|
|
||||||
# {
|
|
||||||
# name = "";
|
|
||||||
# url = "";
|
|
||||||
# keyword = "";
|
|
||||||
# tags = [""];
|
|
||||||
# }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
{...}: {
|
|
||||||
config = {
|
|
||||||
programs = {
|
|
||||||
git = {
|
|
||||||
userName = "Leyla Becker";
|
|
||||||
userEmail = "git@jan-leila.com";
|
|
||||||
extraConfig.init.defaultBranch = "main";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
config = {
|
|
||||||
sops.secrets = {
|
|
||||||
"application-keys/makemkv" = {
|
|
||||||
sopsFile = "${inputs.secrets}/application-keys.yaml";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
programs.makemkv = {
|
|
||||||
appKeyFile = config.sops.placeholder."application-keys/makemkv";
|
|
||||||
destinationDir = "/home/leyla/downloads/makemkv";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
config = {
|
|
||||||
programs = {
|
|
||||||
openssh = {
|
|
||||||
authorizedKeys = [
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJHeItmt8TRW43uNcOC+eIurYC7Eunc0V3LGocQqLaYj leyla@horizon"
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILimFIW2exEH/Xo7LtXkqgE04qusvnPNpPWSCeNrFkP leyla@defiant"
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKBiZkg1c2aaNHiieBX4cEziqvJVj9pcDfzUrKU/mO0I leyla@twilight"
|
|
||||||
];
|
|
||||||
hostKeys = [
|
|
||||||
{
|
|
||||||
type = "ed25519";
|
|
||||||
path = "${config.home.username}_${osConfig.networking.hostName}_ed25519";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,118 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
nix-development-enabled = osConfig.host.nix-development.enable;
|
|
||||||
ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable;
|
|
||||||
in {
|
|
||||||
config = lib.mkIf config.user.isDesktopUser {
|
|
||||||
nixpkgs = {
|
|
||||||
overlays = [
|
|
||||||
inputs.nix-vscode-extensions.overlays.default
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
bash.shellAliases = {
|
|
||||||
code = "codium";
|
|
||||||
};
|
|
||||||
|
|
||||||
vscode = let
|
|
||||||
extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system};
|
|
||||||
open-vsx = extensions.open-vsx;
|
|
||||||
vscode-marketplace = extensions.vscode-marketplace;
|
|
||||||
in {
|
|
||||||
package = pkgs.vscodium;
|
|
||||||
|
|
||||||
mutableExtensionsDir = false;
|
|
||||||
|
|
||||||
profiles.default = {
|
|
||||||
enableUpdateCheck = false;
|
|
||||||
enableExtensionUpdateCheck = false;
|
|
||||||
|
|
||||||
userSettings = lib.mkMerge [
|
|
||||||
{
|
|
||||||
"workbench.colorTheme" = "Atom One Dark";
|
|
||||||
"cSpell.userWords" = import ./user-words.nix;
|
|
||||||
"javascript.updateImportsOnFileMove.enabled" = "always";
|
|
||||||
"editor.tabSize" = 2;
|
|
||||||
"editor.insertSpaces" = false;
|
|
||||||
}
|
|
||||||
(lib.mkIf nix-development-enabled {
|
|
||||||
"nix.enableLanguageServer" = true;
|
|
||||||
"nix.serverPath" = "nil";
|
|
||||||
"[nix]" = {
|
|
||||||
"editor.defaultFormatter" = "kamadorueda.alejandra";
|
|
||||||
"editor.formatOnPaste" = true;
|
|
||||||
"editor.formatOnSave" = true;
|
|
||||||
"editor.formatOnType" = true;
|
|
||||||
};
|
|
||||||
"alejandra.program" = "alejandra";
|
|
||||||
"nixpkgs" = {
|
|
||||||
"expr" = "import <nixpkgs> {}";
|
|
||||||
};
|
|
||||||
})
|
|
||||||
(lib.mkIf ai-tooling-enabled {
|
|
||||||
"continue.telemetryEnabled" = false;
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
extensions = (
|
|
||||||
with open-vsx;
|
|
||||||
[
|
|
||||||
# vs code feel extensions
|
|
||||||
ms-vscode.atom-keybindings
|
|
||||||
akamud.vscode-theme-onedark
|
|
||||||
streetsidesoftware.code-spell-checker
|
|
||||||
streetsidesoftware.code-spell-checker-german
|
|
||||||
streetsidesoftware.code-spell-checker-italian
|
|
||||||
jeanp413.open-remote-ssh
|
|
||||||
|
|
||||||
# html extensions
|
|
||||||
formulahendry.auto-rename-tag
|
|
||||||
ms-vscode.live-server
|
|
||||||
|
|
||||||
# js extensions
|
|
||||||
dsznajder.es7-react-js-snippets
|
|
||||||
dbaeumer.vscode-eslint
|
|
||||||
standard.vscode-standard
|
|
||||||
firsttris.vscode-jest-runner
|
|
||||||
stylelint.vscode-stylelint
|
|
||||||
tauri-apps.tauri-vscode
|
|
||||||
|
|
||||||
# go extensions
|
|
||||||
golang.go
|
|
||||||
|
|
||||||
# astro blog extensions
|
|
||||||
astro-build.astro-vscode
|
|
||||||
unifiedjs.vscode-mdx
|
|
||||||
|
|
||||||
# misc extensions
|
|
||||||
tamasfe.even-better-toml
|
|
||||||
]
|
|
||||||
++ (lib.lists.optionals nix-development-enabled [
|
|
||||||
# nix extensions
|
|
||||||
pinage404.nix-extension-pack
|
|
||||||
jnoortheen.nix-ide
|
|
||||||
kamadorueda.alejandra
|
|
||||||
])
|
|
||||||
++ (
|
|
||||||
with vscode-marketplace;
|
|
||||||
[
|
|
||||||
# js extensions
|
|
||||||
karyfoundation.nearley
|
|
||||||
]
|
|
||||||
++ (lib.lists.optionals ai-tooling-enabled [
|
|
||||||
continue.continue
|
|
||||||
])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
[
|
|
||||||
"leyla"
|
|
||||||
"webdav"
|
|
||||||
"ollama"
|
|
||||||
"optimise"
|
|
||||||
]
|
|
|
@ -1,19 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
modulesPath,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [(modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix")];
|
|
||||||
|
|
||||||
systemd.services.sshd.wantedBy = pkgs.lib.mkForce ["multi-user.target"];
|
|
||||||
users.users.root.openssh.authorizedKeys.keys = [
|
|
||||||
"ssh-ed25519 AaAeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee username@host"
|
|
||||||
];
|
|
||||||
|
|
||||||
isoImage.squashfsCompression = "gzip -Xcompression-level 1";
|
|
||||||
|
|
||||||
networking.hostName = "installer";
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./configuration.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,310 +0,0 @@
|
||||||
# server nas
|
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
sops.secrets = {
|
|
||||||
"vpn-keys/tailscale-authkey/defiant" = {
|
|
||||||
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
|
|
||||||
};
|
|
||||||
"vpn-keys/proton-wireguard/defiant-p2p" = {
|
|
||||||
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
|
|
||||||
mode = "0640";
|
|
||||||
owner = "root";
|
|
||||||
group = "systemd-network";
|
|
||||||
};
|
|
||||||
"services/zfs_smtp_token" = {
|
|
||||||
sopsFile = "${inputs.secrets}/defiant-services.yaml";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
host = {
|
|
||||||
users = {
|
|
||||||
leyla = {
|
|
||||||
isDesktopUser = true;
|
|
||||||
isTerminalUser = true;
|
|
||||||
isPrincipleUser = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
impermanence.enable = true;
|
|
||||||
storage = {
|
|
||||||
enable = true;
|
|
||||||
encryption = true;
|
|
||||||
notifications = {
|
|
||||||
enable = true;
|
|
||||||
host = "smtp.protonmail.ch";
|
|
||||||
port = 587;
|
|
||||||
to = "leyla@jan-leila.com";
|
|
||||||
user = "leyla@jan-leila.com";
|
|
||||||
tokenFile = config.sops.secrets."services/zfs_smtp_token".path;
|
|
||||||
};
|
|
||||||
pool = {
|
|
||||||
# We are having to boot off of the nvm cache drive because I cant figure out how to boot via the HBA
|
|
||||||
bootDrives = ["nvme-Samsung_SSD_990_PRO_4TB_S7KGNU0X907881F"];
|
|
||||||
vdevs = [
|
|
||||||
[
|
|
||||||
"ata-ST18000NE000-3G6101_ZVTCXVEB"
|
|
||||||
"ata-ST18000NE000-3G6101_ZVTCXWSC"
|
|
||||||
"ata-ST18000NE000-3G6101_ZVTD10EH"
|
|
||||||
"ata-ST18000NT001-3NF101_ZVTE0S3Q"
|
|
||||||
"ata-ST18000NT001-3NF101_ZVTEF27J"
|
|
||||||
"ata-ST18000NE000-3G6101_ZVTJ7359"
|
|
||||||
]
|
|
||||||
# TODO: this needs to be configured manually
|
|
||||||
[
|
|
||||||
"ata-ST4000NE001-2MA101_WS2275P3"
|
|
||||||
"ata-ST4000NE001-2MA101_WS227B9F"
|
|
||||||
"ata-ST4000NE001-2MA101_WS227CEW"
|
|
||||||
"ata-ST4000NE001-2MA101_WS227CYN"
|
|
||||||
"ata-ST4000NE001-2MA101_WS23TBWV"
|
|
||||||
"ata-ST4000NE001-2MA101_WS23TC5F"
|
|
||||||
]
|
|
||||||
];
|
|
||||||
cache = [
|
|
||||||
"nvme-Samsung_SSD_990_PRO_4TB_S7KGNU0X907881F"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
network_storage = {
|
|
||||||
enable = true;
|
|
||||||
directories = [
|
|
||||||
{
|
|
||||||
folder = "leyla_documents";
|
|
||||||
user = "leyla";
|
|
||||||
group = "leyla";
|
|
||||||
bind = "/home/leyla/documents";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
folder = "eve_documents";
|
|
||||||
user = "eve";
|
|
||||||
group = "eve";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
folder = "users_documents";
|
|
||||||
user = "root";
|
|
||||||
group = "users";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
folder = "media";
|
|
||||||
user = "jellyfin";
|
|
||||||
group = "jellyfin_media";
|
|
||||||
bind = config.services.jellyfin.media_directory;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
nfs = {
|
|
||||||
enable = true;
|
|
||||||
directories = ["leyla_documents" "eve_documents" "users_documents" "media"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
reverse_proxy = {
|
|
||||||
enable = true;
|
|
||||||
enableACME = true;
|
|
||||||
hostname = "jan-leila.com";
|
|
||||||
};
|
|
||||||
postgres = {
|
|
||||||
extraUsers = {
|
|
||||||
leyla = {
|
|
||||||
isAdmin = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# home-assistant = {
|
|
||||||
# enable = false;
|
|
||||||
# subdomain = "home";
|
|
||||||
# };
|
|
||||||
adguardhome = {
|
|
||||||
enable = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.network = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# config = {
|
|
||||||
# routeTables = {
|
|
||||||
# p2p = 1;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
|
|
||||||
netdevs = {
|
|
||||||
"10-bond0" = {
|
|
||||||
netdevConfig = {
|
|
||||||
Kind = "bond";
|
|
||||||
Name = "bond0";
|
|
||||||
};
|
|
||||||
bondConfig = {
|
|
||||||
Mode = "802.3ad";
|
|
||||||
TransmitHashPolicy = "layer3+4";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# "15-p2p0" = {
|
|
||||||
# netdevConfig = {
|
|
||||||
# Kind = "wireguard";
|
|
||||||
# Name = "p2p0";
|
|
||||||
# MTUBytes = "1280";
|
|
||||||
# };
|
|
||||||
# wireguardConfig = {
|
|
||||||
# PrivateKeyFile = config.sops.secrets."vpn-keys/proton-wireguard/defiant-p2p".path;
|
|
||||||
# ListenPort = 51820;
|
|
||||||
# # RouteTable = "p2p";
|
|
||||||
# };
|
|
||||||
# wireguardPeers = [
|
|
||||||
# {
|
|
||||||
# PublicKey = "rRO6yJim++Ezz6scCLMaizI+taDjU1pzR2nfW6qKbW0=";
|
|
||||||
# Endpoint = "185.230.126.146:51820";
|
|
||||||
# AllowedIPs = ["0.0.0.0/0"];
|
|
||||||
# RouteTable = "off";
|
|
||||||
# }
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
networks = {
|
|
||||||
"40-bond0" = {
|
|
||||||
matchConfig.Name = "bond0";
|
|
||||||
linkConfig = {
|
|
||||||
RequiredForOnline = "degraded-carrier";
|
|
||||||
RequiredFamilyForOnline = "any";
|
|
||||||
};
|
|
||||||
networkConfig.DHCP = "yes";
|
|
||||||
|
|
||||||
address = [
|
|
||||||
"192.168.1.10/32"
|
|
||||||
];
|
|
||||||
|
|
||||||
gateway = ["192.168.1.1"];
|
|
||||||
dns = ["192.168.1.1"];
|
|
||||||
};
|
|
||||||
|
|
||||||
# "45-p2p0" = {
|
|
||||||
# matchConfig.Name = "p2p0";
|
|
||||||
# address = [
|
|
||||||
# "10.2.0.2/32"
|
|
||||||
# ];
|
|
||||||
# routes = [
|
|
||||||
# {
|
|
||||||
# Destination = "0.0.0.0/0";
|
|
||||||
# }
|
|
||||||
# ];
|
|
||||||
# linkConfig.RequiredForOnline = false;
|
|
||||||
# };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
# TODO: move zfs scrubbing into module
|
|
||||||
zfs = {
|
|
||||||
autoScrub.enable = true;
|
|
||||||
autoSnapshot.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# temp enable desktop enviroment for setup
|
|
||||||
# Enable the X11 windowing system.
|
|
||||||
xserver.enable = true;
|
|
||||||
|
|
||||||
# Enable the GNOME Desktop Environment.
|
|
||||||
displayManager = {
|
|
||||||
gdm.enable = true;
|
|
||||||
};
|
|
||||||
desktopManager = {
|
|
||||||
gnome.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
ollama = {
|
|
||||||
enable = true;
|
|
||||||
exposePort = true;
|
|
||||||
|
|
||||||
loadModels = [
|
|
||||||
# conversation models
|
|
||||||
"llama3.1:8b"
|
|
||||||
"deepseek-r1:8b"
|
|
||||||
"deepseek-r1:32b"
|
|
||||||
"deepseek-r1:70b"
|
|
||||||
|
|
||||||
# auto complete models
|
|
||||||
"qwen2.5-coder:1.5b-base"
|
|
||||||
"qwen2.5-coder:7b"
|
|
||||||
"deepseek-coder:6.7b"
|
|
||||||
"deepseek-coder:33b"
|
|
||||||
|
|
||||||
# agent models
|
|
||||||
"qwen3:8b"
|
|
||||||
"qwen3:32b"
|
|
||||||
|
|
||||||
# embedding models
|
|
||||||
"nomic-embed-text:latest"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
tailscale = {
|
|
||||||
enable = true;
|
|
||||||
authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/defiant".path;
|
|
||||||
useRoutingFeatures = "server";
|
|
||||||
extraUpFlags = [
|
|
||||||
"--advertise-exit-node"
|
|
||||||
"--advertise-routes=192.168.0.0/24"
|
|
||||||
"--accept-dns=false"
|
|
||||||
];
|
|
||||||
extraSetFlags = [
|
|
||||||
"--advertise-exit-node"
|
|
||||||
"--advertise-routes=192.168.0.0/24"
|
|
||||||
"--accept-dns=false"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
syncthing.enable = true;
|
|
||||||
|
|
||||||
fail2ban.enable = true;
|
|
||||||
|
|
||||||
jellyfin = {
|
|
||||||
enable = true;
|
|
||||||
subdomain = "media";
|
|
||||||
extraSubdomains = ["jellyfin"];
|
|
||||||
};
|
|
||||||
|
|
||||||
immich = {
|
|
||||||
enable = true;
|
|
||||||
subdomain = "photos";
|
|
||||||
};
|
|
||||||
|
|
||||||
forgejo = {
|
|
||||||
enable = true;
|
|
||||||
subdomain = "git";
|
|
||||||
};
|
|
||||||
|
|
||||||
searx = {
|
|
||||||
enable = true;
|
|
||||||
subdomain = "search";
|
|
||||||
};
|
|
||||||
|
|
||||||
virt-home-assistant = {
|
|
||||||
enable = false;
|
|
||||||
networkBridge = "bond0";
|
|
||||||
hostDevice = "0x10c4:0xea60";
|
|
||||||
};
|
|
||||||
|
|
||||||
qbittorrent = {
|
|
||||||
enable = true;
|
|
||||||
mediaDir = "/srv/qbittorent";
|
|
||||||
openFirewall = true;
|
|
||||||
webPort = 8084;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# disable computer sleeping
|
|
||||||
systemd.targets = {
|
|
||||||
sleep.enable = false;
|
|
||||||
suspend.enable = false;
|
|
||||||
hibernate.enable = false;
|
|
||||||
hybrid-sleep.enable = false;
|
|
||||||
};
|
|
||||||
services.displayManager.gdm.autoSuspend = false;
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
|
||||||
# settings for stateful data, like file locations and database versions
|
|
||||||
# on your system were taken. It's perfectly fine and recommended to leave
|
|
||||||
# this value at the release version of the first install of this system.
|
|
||||||
# Before changing this value read the documentation for this option
|
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
|
||||||
system.stateVersion = "23.05"; # Did you read the comment?
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
# server nas
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./hardware-configuration.nix
|
|
||||||
./configuration.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,63 +0,0 @@
|
||||||
# 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,
|
|
||||||
modulesPath,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
initrd = {
|
|
||||||
availableKernelModules = ["xhci_pci" "aacraid" "ahci" "usbhid" "nvme" "usb_storage" "sd_mod"];
|
|
||||||
kernelModules = [];
|
|
||||||
};
|
|
||||||
kernelModules = ["kvm-amd"];
|
|
||||||
extraModulePackages = [];
|
|
||||||
|
|
||||||
# Bootloader.
|
|
||||||
loader = {
|
|
||||||
systemd-boot.enable = true;
|
|
||||||
efi = {
|
|
||||||
canTouchEfiVariables = true;
|
|
||||||
efiSysMountPoint = "/boot";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
supportedFilesystems = ["zfs"];
|
|
||||||
|
|
||||||
zfs.extraPools = ["rpool"];
|
|
||||||
};
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
hostName = "defiant"; # Define your hostname.
|
|
||||||
hostId = "c51763d6";
|
|
||||||
useNetworkd = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.network = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
networks = {
|
|
||||||
"30-eno1" = {
|
|
||||||
matchConfig.Name = "eno1";
|
|
||||||
networkConfig.Bond = "bond0";
|
|
||||||
};
|
|
||||||
"30-eno2" = {
|
|
||||||
matchConfig.Name = "eno2";
|
|
||||||
networkConfig.Bond = "bond0";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
hardware = {
|
|
||||||
# TODO: hardware graphics
|
|
||||||
cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,155 +0,0 @@
|
||||||
# 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`).
|
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
./nvidia-drivers.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
# Use the systemd-boot EFI boot loader.
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
# networking.hostName = "nixos"; # Define your hostname.
|
|
||||||
# Pick only one of the below networking options.
|
|
||||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
|
||||||
# networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
|
||||||
|
|
||||||
# Set your time zone.
|
|
||||||
# time.timeZone = "Europe/Amsterdam";
|
|
||||||
|
|
||||||
# Configure network proxy if necessary
|
|
||||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
|
||||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
|
||||||
|
|
||||||
# Select internationalisation properties.
|
|
||||||
# i18n.defaultLocale = "en_US.UTF-8";
|
|
||||||
# console = {
|
|
||||||
# font = "Lat2-Terminus16";
|
|
||||||
# keyMap = "us";
|
|
||||||
# useXkbConfig = true; # use xkb.options in tty.
|
|
||||||
# };
|
|
||||||
|
|
||||||
# Enable the X11 windowing system.
|
|
||||||
services.xserver.enable = true;
|
|
||||||
|
|
||||||
# Enable the GNOME Desktop Environment.
|
|
||||||
services.displayManager.gdm.enable = true;
|
|
||||||
services.desktopManager.gnome.enable = true;
|
|
||||||
|
|
||||||
host = {
|
|
||||||
users = {
|
|
||||||
eve = {
|
|
||||||
isDesktopUser = true;
|
|
||||||
isTerminalUser = true;
|
|
||||||
isPrincipleUser = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
hardware = {
|
|
||||||
piperMouse.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
storage = {
|
|
||||||
enable = true;
|
|
||||||
pool = {
|
|
||||||
mode = "";
|
|
||||||
drives = ["wwn-0x5000039fd0cf05eb"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Configure keymap in X11
|
|
||||||
# services.xserver.xkb.layout = "us";
|
|
||||||
# services.xserver.xkb.options = "eurosign:e,caps:escape";
|
|
||||||
|
|
||||||
# Enable CUPS to print documents.
|
|
||||||
# services.printing.enable = true;
|
|
||||||
|
|
||||||
# Enable sound.
|
|
||||||
# services.pulseaudio.enable = true;
|
|
||||||
# OR
|
|
||||||
# services.pipewire = {
|
|
||||||
# enable = true;
|
|
||||||
# pulse.enable = true;
|
|
||||||
# };
|
|
||||||
|
|
||||||
# Enable touchpad support (enabled default in most desktopManager).
|
|
||||||
# services.libinput.enable = true;
|
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
|
||||||
# users.users.alice = {
|
|
||||||
# isNormalUser = true;
|
|
||||||
# extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
|
||||||
# packages = with pkgs; [
|
|
||||||
# tree
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
|
|
||||||
# programs.firefox.enable = true;
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
# Packages that can be installed without any extra configuration
|
|
||||||
# See https://search.nixos.org/packages for all options
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
wget
|
|
||||||
];
|
|
||||||
|
|
||||||
# Packages that need to be installed with some extra configuration
|
|
||||||
# See https://search.nixos.org/options for all options
|
|
||||||
programs = {};
|
|
||||||
|
|
||||||
# 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;
|
|
||||||
# };
|
|
||||||
|
|
||||||
# List services that you want to enable:
|
|
||||||
|
|
||||||
# Enable the OpenSSH daemon.
|
|
||||||
# services.openssh.enable = true;
|
|
||||||
|
|
||||||
# Open ports in the firewall.
|
|
||||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
|
||||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
|
||||||
# Or disable the firewall altogether.
|
|
||||||
# networking.firewall.enable = false;
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
networkmanager.enable = true;
|
|
||||||
useDHCP = lib.mkDefault true;
|
|
||||||
hostId = "7e35eb97"; # arbitrary id number generated via this command: `head -c4 /dev/urandom | od -A none -t x4`
|
|
||||||
hostName = "emergent"; # Define your hostname.
|
|
||||||
};
|
|
||||||
|
|
||||||
# Copy the NixOS configuration file and link it from the resulting system
|
|
||||||
# (/run/current-system/configuration.nix). This is useful in case you
|
|
||||||
# accidentally delete configuration.nix.
|
|
||||||
# system.copySystemConfiguration = true;
|
|
||||||
|
|
||||||
# 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 - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
|
|
||||||
# to actually do that.
|
|
||||||
#
|
|
||||||
# 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 = "25.05"; # Did you read the comment?
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
# evs desktop
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./configuration.nix
|
|
||||||
./hardware-configuration.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
# 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" "usb_storage" "usbhid" "sd_mod"];
|
|
||||||
boot.initrd.kernelModules = [];
|
|
||||||
boot.kernelModules = [];
|
|
||||||
boot.extraModulePackages = [];
|
|
||||||
|
|
||||||
swapDevices = [];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
|
||||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
|
||||||
# still possible to use this option, but it's recommended to use it in conjunction
|
|
||||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
|
||||||
networking.useDHCP = lib.mkDefault true;
|
|
||||||
# networking.interfaces.enp42s0.useDHCP = lib.mkDefault true;
|
|
||||||
# networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true;
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
# Enable OpenGL
|
|
||||||
hardware.graphics = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Load nvidia driver for Xorg and Wayland
|
|
||||||
services.xserver.videoDrivers = ["nvidia"];
|
|
||||||
|
|
||||||
hardware.nvidia = {
|
|
||||||
# Modesetting is required.
|
|
||||||
modesetting.enable = true;
|
|
||||||
|
|
||||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
|
||||||
# Enable this if you have graphical corruption issues or application crashes after waking
|
|
||||||
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
|
||||||
# of just the bare essentials.
|
|
||||||
powerManagement.enable = false;
|
|
||||||
|
|
||||||
# Fine-grained power management. Turns off GPU when not in use.
|
|
||||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
|
|
||||||
# Use the NVidia open source kernel module (not to be confused with the
|
|
||||||
# independent third-party "nouveau" open source driver).
|
|
||||||
# Support is limited to the Turing and later architectures. Full list of
|
|
||||||
# supported GPUs is at:
|
|
||||||
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
|
||||||
# Only available from driver 515.43.04+
|
|
||||||
open = true;
|
|
||||||
|
|
||||||
# Enable the Nvidia settings menu,
|
|
||||||
# accessible via `nvidia-settings`.
|
|
||||||
nvidiaSettings = true;
|
|
||||||
|
|
||||||
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,147 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
inputs.nixos-hardware.nixosModules.framework-11th-gen-intel
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
initrd = {
|
|
||||||
availableKernelModules = ["usb_storage" "sd_mod"];
|
|
||||||
};
|
|
||||||
kernelModules = ["sg"];
|
|
||||||
|
|
||||||
# Bootloader.
|
|
||||||
loader = {
|
|
||||||
systemd-boot.enable = true;
|
|
||||||
efi.canTouchEfiVariables = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
host = {
|
|
||||||
users = {
|
|
||||||
leyla = {
|
|
||||||
isDesktopUser = true;
|
|
||||||
isTerminalUser = true;
|
|
||||||
isPrincipleUser = true;
|
|
||||||
};
|
|
||||||
eve.isDesktopUser = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
hardware = {
|
|
||||||
directAccess.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
ai = {
|
|
||||||
enable = true;
|
|
||||||
models = {
|
|
||||||
"Llama 3.1 8B" = {
|
|
||||||
model = "lamma3.1:8b";
|
|
||||||
roles = ["chat" "edit" "apply"];
|
|
||||||
apiBase = "http://twilight:11434";
|
|
||||||
};
|
|
||||||
"Deepseek Coder:6.7B" = {
|
|
||||||
model = "deepseek-coder:6.7b";
|
|
||||||
roles = ["chat" "edit" "apply"];
|
|
||||||
apiBase = "http://twilight:11434";
|
|
||||||
};
|
|
||||||
"Deepseek Coder:33B" = {
|
|
||||||
model = "deepseek-coder:33b";
|
|
||||||
roles = ["chat" "edit" "apply"];
|
|
||||||
apiBase = "http://twilight:11434";
|
|
||||||
};
|
|
||||||
|
|
||||||
"Deepseek r1:8B" = {
|
|
||||||
model = "deepseek-r1:8b";
|
|
||||||
roles = ["chat"];
|
|
||||||
apiBase = "http://twilight:11434";
|
|
||||||
};
|
|
||||||
|
|
||||||
"Deepseek r1:32B" = {
|
|
||||||
model = "deepseek-r1:32b";
|
|
||||||
roles = ["chat"];
|
|
||||||
apiBase = "http://twilight:11434";
|
|
||||||
};
|
|
||||||
|
|
||||||
"qwen2.5-coder:1.5b-base" = {
|
|
||||||
model = "qwen2.5-coder:1.5b-base";
|
|
||||||
roles = ["autocomplete"];
|
|
||||||
apiBase = "http://twilight:11434";
|
|
||||||
};
|
|
||||||
|
|
||||||
"nomic-embed-text:latest" = {
|
|
||||||
model = "nomic-embed-text:latest";
|
|
||||||
roles = ["embed"];
|
|
||||||
apiBase = "http://twilight:11434";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
cachefilesd
|
|
||||||
webtoon-dl
|
|
||||||
];
|
|
||||||
services.cachefilesd.enable = true;
|
|
||||||
|
|
||||||
programs = {
|
|
||||||
adb.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
networkmanager.enable = true;
|
|
||||||
hostName = "horizon"; # Define your hostname.
|
|
||||||
};
|
|
||||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
|
||||||
|
|
||||||
hardware = {
|
|
||||||
graphics.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
sops.secrets = {
|
|
||||||
"vpn-keys/tailscale-authkey/horizon" = {
|
|
||||||
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
# sudo fprintd-enroll
|
|
||||||
fprintd = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
# firmware update tool
|
|
||||||
fwupd = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
tailscale = {
|
|
||||||
enable = true;
|
|
||||||
authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/horizon".path;
|
|
||||||
useRoutingFeatures = "client";
|
|
||||||
};
|
|
||||||
|
|
||||||
syncthing.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable touchpad support (enabled default in most desktopManager).
|
|
||||||
# services.xserver.libinput.enable = true;
|
|
||||||
|
|
||||||
# Open ports in the firewall.
|
|
||||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
|
||||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
|
||||||
# Or disable the firewall altogether.
|
|
||||||
# networking.firewall.enable = false;
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
|
||||||
# settings for stateful data, like file locations and database versions
|
|
||||||
# on your system were taken. It's perfectly fine and recommended to leave
|
|
||||||
# this value at the release version of the first install of this system.
|
|
||||||
# Before changing this value read the documentation for this option
|
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
|
||||||
system.stateVersion = "23.05"; # Did you read the comment?
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
# leyla laptop
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./configuration.nix
|
|
||||||
./hardware-configuration.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
# 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,
|
|
||||||
modulesPath,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["xhci_pci" "thunderbolt" "nvme"];
|
|
||||||
boot.initrd.kernelModules = [];
|
|
||||||
boot.kernelModules = ["kvm-intel"];
|
|
||||||
boot.extraModulePackages = [];
|
|
||||||
|
|
||||||
fileSystems = {
|
|
||||||
"/" = {
|
|
||||||
device = "/dev/disk/by-uuid/866d422b-f816-4ad9-9846-791839cb9337";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
|
|
||||||
"/boot" = {
|
|
||||||
device = "/dev/disk/by-uuid/E138-65B5";
|
|
||||||
fsType = "vfat";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = [
|
|
||||||
{device = "/dev/disk/by-uuid/be98e952-a072-4c3a-8c12-69500b5a2fff";}
|
|
||||||
];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
|
||||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
|
||||||
# still possible to use this option, but it's recommended to use it in conjunction
|
|
||||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
|
||||||
networking.useDHCP = lib.mkDefault true;
|
|
||||||
# networking.interfaces.tailscale0.useDHCP = lib.mkDefault true;
|
|
||||||
# networking.interfaces.wlp170s0.useDHCP = lib.mkDefault true;
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
}
|
|
|
@ -1,210 +0,0 @@
|
||||||
{
|
|
||||||
inputs,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
./monitors.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["usb_storage"];
|
|
||||||
boot.kernelModules = ["sg"];
|
|
||||||
|
|
||||||
boot.loader = {
|
|
||||||
systemd-boot.enable = true;
|
|
||||||
efi.canTouchEfiVariables = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
sops.secrets = {
|
|
||||||
"vpn-keys/tailscale-authkey/twilight" = {
|
|
||||||
sopsFile = "${inputs.secrets}/vpn-keys.yaml";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
host = {
|
|
||||||
users = {
|
|
||||||
leyla = {
|
|
||||||
isDesktopUser = true;
|
|
||||||
isTerminalUser = true;
|
|
||||||
isPrincipleUser = true;
|
|
||||||
};
|
|
||||||
eve.isDesktopUser = true;
|
|
||||||
};
|
|
||||||
hardware = {
|
|
||||||
piperMouse.enable = true;
|
|
||||||
viaKeyboard.enable = true;
|
|
||||||
openRGB.enable = true;
|
|
||||||
graphicsAcceleration.enable = true;
|
|
||||||
directAccess.enable = true;
|
|
||||||
};
|
|
||||||
ai = {
|
|
||||||
enable = true;
|
|
||||||
# TODO: benchmark twilight against defiant and prune this list of models that are faster on defiant
|
|
||||||
models = {
|
|
||||||
# conversation models
|
|
||||||
"Llama 3.1 8B" = {
|
|
||||||
model = "lamma3.1:8b";
|
|
||||||
roles = ["chat" "edit" "apply"];
|
|
||||||
};
|
|
||||||
"deepseek-r1:8b" = {
|
|
||||||
model = "deepseek-r1:8b";
|
|
||||||
roles = ["chat" "edit" "apply"];
|
|
||||||
};
|
|
||||||
"deepseek-r1:32b" = {
|
|
||||||
model = "deepseek-r1:32b";
|
|
||||||
roles = ["chat" "edit" "apply"];
|
|
||||||
};
|
|
||||||
|
|
||||||
# auto complete models
|
|
||||||
"qwen2.5-coder:1.5b-base" = {
|
|
||||||
model = "qwen2.5-coder:1.5b-base";
|
|
||||||
roles = ["autocomplete"];
|
|
||||||
};
|
|
||||||
"qwen2.5-coder:7b" = {
|
|
||||||
model = "qwen2.5-coder:7b";
|
|
||||||
roles = ["autocomplete"];
|
|
||||||
};
|
|
||||||
"deepseek-coder:6.7b" = {
|
|
||||||
model = "deepseek-coder:6.7b";
|
|
||||||
roles = ["autocomplete"];
|
|
||||||
};
|
|
||||||
"deepseek-coder:33b" = {
|
|
||||||
model = "deepseek-coder:33b";
|
|
||||||
roles = ["autocomplete"];
|
|
||||||
};
|
|
||||||
|
|
||||||
# agent models
|
|
||||||
"qwen3:32b" = {
|
|
||||||
model = "qwen3:32b";
|
|
||||||
roles = ["chat" "edit" "apply"];
|
|
||||||
};
|
|
||||||
|
|
||||||
# embedding models
|
|
||||||
"nomic-embed-text:latest" = {
|
|
||||||
model = "nomic-embed-text:latest";
|
|
||||||
roles = ["embed"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
services = {
|
|
||||||
ollama = {
|
|
||||||
enable = true;
|
|
||||||
exposePort = true;
|
|
||||||
|
|
||||||
loadModels = [
|
|
||||||
# conversation models
|
|
||||||
"llama3.1:8b"
|
|
||||||
"deepseek-r1:8b"
|
|
||||||
"deepseek-r1:32b"
|
|
||||||
|
|
||||||
# auto complete models
|
|
||||||
"qwen2.5-coder:1.5b-base"
|
|
||||||
"qwen2.5-coder:7b"
|
|
||||||
"deepseek-coder:6.7b"
|
|
||||||
"deepseek-coder:33b"
|
|
||||||
|
|
||||||
# agent models
|
|
||||||
"qwen3:32b"
|
|
||||||
|
|
||||||
# embedding models
|
|
||||||
"nomic-embed-text:latest"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
tailscale = {
|
|
||||||
enable = true;
|
|
||||||
authKeyFile = config.sops.secrets."vpn-keys/tailscale-authkey/twilight".path;
|
|
||||||
useRoutingFeatures = "both";
|
|
||||||
extraUpFlags = [
|
|
||||||
"--advertise-exit-node"
|
|
||||||
"--advertise-routes=192.168.0.0/24"
|
|
||||||
];
|
|
||||||
extraSetFlags = [
|
|
||||||
"--advertise-exit-node"
|
|
||||||
"--advertise-routes=192.168.0.0/24"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
syncthing.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
boot.supportedFilesystems = ["nfs"];
|
|
||||||
|
|
||||||
fileSystems = {
|
|
||||||
"/mnt/leyla_documents" = {
|
|
||||||
device = "defiant:/exports/leyla_documents";
|
|
||||||
fsType = "nfs";
|
|
||||||
options = [
|
|
||||||
"x-systemd.automount"
|
|
||||||
"noauto"
|
|
||||||
"user"
|
|
||||||
"noatime"
|
|
||||||
"nofail"
|
|
||||||
"soft"
|
|
||||||
"x-systemd.idle-timeout=600"
|
|
||||||
"fsc"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"/mnt/users_documents" = {
|
|
||||||
device = "defiant:/exports/users_documents";
|
|
||||||
fsType = "nfs";
|
|
||||||
options = [
|
|
||||||
"x-systemd.automount"
|
|
||||||
"noauto"
|
|
||||||
"user"
|
|
||||||
"nofail"
|
|
||||||
"soft"
|
|
||||||
"x-systemd.idle-timeout=600"
|
|
||||||
"fsc"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
"/mnt/media" = {
|
|
||||||
device = "defiant:/exports/media";
|
|
||||||
fsType = "nfs";
|
|
||||||
options = [
|
|
||||||
"x-systemd.automount"
|
|
||||||
"noauto"
|
|
||||||
"user"
|
|
||||||
"noatime"
|
|
||||||
"nofail"
|
|
||||||
"soft"
|
|
||||||
"x-systemd.idle-timeout=600"
|
|
||||||
"noatime"
|
|
||||||
"nodiratime"
|
|
||||||
"relatime"
|
|
||||||
"rsize=32768"
|
|
||||||
"wsize=32768"
|
|
||||||
"fsc"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
cachefilesd
|
|
||||||
];
|
|
||||||
hardware.steam-hardware.enable = true; # Provides udev rules for controller, HTC vive, and Valve Index
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
networkmanager.enable = true;
|
|
||||||
hostName = "twilight"; # Define your hostname.
|
|
||||||
};
|
|
||||||
|
|
||||||
# enabled virtualisation for docker
|
|
||||||
# virtualisation.docker.enable = true;
|
|
||||||
|
|
||||||
# Enable touchpad support (enabled default in most desktopManager).
|
|
||||||
# services.xserver.libinput.enable = true;
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
|
||||||
# settings for stateful data, like file locations and database versions
|
|
||||||
# on your system were taken. It's perfectly fine and recommended to leave
|
|
||||||
# this value at the release version of the first install of this system.
|
|
||||||
# Before changing this value read the documentation for this option
|
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
|
||||||
system.stateVersion = "23.05"; # Did you read the comment?
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
# leyla desktop
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./configuration.nix
|
|
||||||
./hardware-configuration.nix
|
|
||||||
./nvidia-drivers.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
# 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,
|
|
||||||
modulesPath,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "sd_mod"];
|
|
||||||
boot.initrd.kernelModules = [];
|
|
||||||
boot.kernelModules = ["kvm-amd"];
|
|
||||||
boot.extraModulePackages = [];
|
|
||||||
|
|
||||||
fileSystems = {
|
|
||||||
"/" = {
|
|
||||||
device = "/dev/disk/by-uuid/8be49c65-2b57-48f1-b74d-244d26061adb";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
|
|
||||||
"/boot" = {
|
|
||||||
device = "/dev/disk/by-uuid/3006-3867";
|
|
||||||
fsType = "vfat";
|
|
||||||
options = ["fmask=0022" "dmask=0022"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = [];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
|
||||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
|
||||||
# still possible to use this option, but it's recommended to use it in conjunction
|
|
||||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
|
||||||
networking.useDHCP = lib.mkDefault true;
|
|
||||||
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
|
||||||
}
|
|
|
@ -1,199 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
systemd.tmpfiles.rules = [
|
|
||||||
"L+ /run/gdm/.config/monitors.xml - - - - ${pkgs.writeText "gdm-monitors.xml" ''
|
|
||||||
<monitors version="2">
|
|
||||||
<configuration>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>0</x>
|
|
||||||
<y>156</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>DP-4</connector>
|
|
||||||
<vendor>DEL</vendor>
|
|
||||||
<product>DELL U2719D</product>
|
|
||||||
<serial>8RGXNS2</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>2560</width>
|
|
||||||
<height>1440</height>
|
|
||||||
<rate>59.951</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>2560</x>
|
|
||||||
<y>324</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<primary>yes</primary>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>DP-2</connector>
|
|
||||||
<vendor>GSM</vendor>
|
|
||||||
<product>LG ULTRAGEAR</product>
|
|
||||||
<serial>0x00068c96</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>1920</width>
|
|
||||||
<height>1080</height>
|
|
||||||
<rate>240.001</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>4480</x>
|
|
||||||
<y>0</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<transform>
|
|
||||||
<rotation>left</rotation>
|
|
||||||
<flipped>no</flipped>
|
|
||||||
</transform>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>HDMI-0</connector>
|
|
||||||
<vendor>HWP</vendor>
|
|
||||||
<product>HP w2207</product>
|
|
||||||
<serial>CND7332S88</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>1600</width>
|
|
||||||
<height>1000</height>
|
|
||||||
<rate>59.999</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
</configuration>
|
|
||||||
<configuration>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<primary>yes</primary>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>DP-1</connector>
|
|
||||||
<vendor>DEL</vendor>
|
|
||||||
<product>DELL U2719D</product>
|
|
||||||
<serial>8RGXNS2</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>2560</width>
|
|
||||||
<height>1440</height>
|
|
||||||
<rate>59.951</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>4480</x>
|
|
||||||
<y>226</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<transform>
|
|
||||||
<rotation>left</rotation>
|
|
||||||
<flipped>no</flipped>
|
|
||||||
</transform>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>HDMI-1</connector>
|
|
||||||
<vendor>HWP</vendor>
|
|
||||||
<product>HP w2207</product>
|
|
||||||
<serial>CND7332S88</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>1680</width>
|
|
||||||
<height>1050</height>
|
|
||||||
<rate>59.954</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>2560</x>
|
|
||||||
<y>226</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>DP-2</connector>
|
|
||||||
<vendor>GSM</vendor>
|
|
||||||
<product>LG ULTRAGEAR</product>
|
|
||||||
<serial>0x00068c96</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>1920</width>
|
|
||||||
<height>1080</height>
|
|
||||||
<rate>240.001</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
</configuration>
|
|
||||||
<configuration>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>2560</x>
|
|
||||||
<y>228</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<primary>yes</primary>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>DP-2</connector>
|
|
||||||
<vendor>GSM</vendor>
|
|
||||||
<product>LG ULTRAGEAR</product>
|
|
||||||
<serial>0x00068c96</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>1920</width>
|
|
||||||
<height>1080</height>
|
|
||||||
<rate>240.001</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>4480</x>
|
|
||||||
<y>69</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<transform>
|
|
||||||
<rotation>left</rotation>
|
|
||||||
<flipped>no</flipped>
|
|
||||||
</transform>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>HDMI-1</connector>
|
|
||||||
<vendor>HWP</vendor>
|
|
||||||
<product>HP w2207</product>
|
|
||||||
<serial>CND7332S88</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>1680</width>
|
|
||||||
<height>1050</height>
|
|
||||||
<rate>59.954</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
<logicalmonitor>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<scale>1</scale>
|
|
||||||
<monitor>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>DP-3</connector>
|
|
||||||
<vendor>DEL</vendor>
|
|
||||||
<product>DELL U2719D</product>
|
|
||||||
<serial>8RGXNS2</serial>
|
|
||||||
</monitorspec>
|
|
||||||
<mode>
|
|
||||||
<width>2560</width>
|
|
||||||
<height>1440</height>
|
|
||||||
<rate>59.951</rate>
|
|
||||||
</mode>
|
|
||||||
</monitor>
|
|
||||||
</logicalmonitor>
|
|
||||||
<disabled>
|
|
||||||
<monitorspec>
|
|
||||||
<connector>None-1</connector>
|
|
||||||
<vendor>unknown</vendor>
|
|
||||||
<product>unknown</product>
|
|
||||||
<serial>unknown</serial>
|
|
||||||
</monitorspec>
|
|
||||||
</disabled>
|
|
||||||
</configuration>
|
|
||||||
</monitors>
|
|
||||||
''}"
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
{config, ...}: {
|
|
||||||
services = {
|
|
||||||
xserver = {
|
|
||||||
# Load nvidia driver for Xorg and Wayland
|
|
||||||
videoDrivers = ["nvidia"];
|
|
||||||
};
|
|
||||||
# Use X instead of wayland for gaming reasons
|
|
||||||
displayManager.gdm.wayland = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
hardware = {
|
|
||||||
# Enable OpenGL
|
|
||||||
graphics.enable = true;
|
|
||||||
|
|
||||||
# install graphics drivers
|
|
||||||
nvidia = {
|
|
||||||
# Modesetting is required.
|
|
||||||
modesetting.enable = true;
|
|
||||||
|
|
||||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
|
||||||
# Enable this if you have graphical corruption issues or application crashes after waking
|
|
||||||
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
|
||||||
# of just the bare essentials.
|
|
||||||
powerManagement.enable = false;
|
|
||||||
|
|
||||||
# Fine-grained power management. Turns off GPU when not in use.
|
|
||||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
|
|
||||||
# Use the NVidia open source kernel module (not to be confused with the
|
|
||||||
# independent third-party "nouveau" open source driver).
|
|
||||||
# Support is limited to the Turing and later architectures. Full list of
|
|
||||||
# supported GPUs is at:
|
|
||||||
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
|
||||||
# Only available from driver 515.43.04+
|
|
||||||
# Currently alpha-quality/buggy, so false is currently the recommended setting.
|
|
||||||
open = true;
|
|
||||||
|
|
||||||
# Enable the Nvidia settings menu,
|
|
||||||
# accessible via `nvidia-settings`.
|
|
||||||
nvidiaSettings = true;
|
|
||||||
|
|
||||||
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.production;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,119 +0,0 @@
|
||||||
{config, ...}: {
|
|
||||||
folders = {
|
|
||||||
leyla_documents = {
|
|
||||||
id = "hvrj0-9bm1p";
|
|
||||||
};
|
|
||||||
leyla_calendar = {
|
|
||||||
id = "8oatl-1rv6w";
|
|
||||||
};
|
|
||||||
leyla_supernote_notes = {
|
|
||||||
id = "dwbuv-zffnf";
|
|
||||||
};
|
|
||||||
eve_records = {
|
|
||||||
id = "by6at-d4h9n";
|
|
||||||
};
|
|
||||||
share = {
|
|
||||||
id = "73ot0-cxmkx";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
devices = {
|
|
||||||
defiant = {
|
|
||||||
id = "3R6E6Y4-2F7MF2I-IGB4WE6-A3SQSMV-LIBYSAM-2OXHHU2-KJ6CGIV-QNMCPAR";
|
|
||||||
folders = {
|
|
||||||
leyla_documents = {
|
|
||||||
folder = config.folders.leyla_documents;
|
|
||||||
path = "/mnt/sync/leyla/documents";
|
|
||||||
};
|
|
||||||
leyla_calendar = {
|
|
||||||
folder = config.folders.leyla_calendar;
|
|
||||||
path = "/mnt/sync/leyla/calendar";
|
|
||||||
};
|
|
||||||
leyla_supernote_notes = {
|
|
||||||
folder = config.folders.leyla_supernote_notes;
|
|
||||||
path = "/mnt/sync/leyla/notes";
|
|
||||||
};
|
|
||||||
eve_records = {
|
|
||||||
folder = config.folders.eve_records;
|
|
||||||
path = "/mnt/sync/eve/records";
|
|
||||||
};
|
|
||||||
share = {
|
|
||||||
folder = config.folders.share;
|
|
||||||
path = "/mnt/sync/default/share";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
twilight = {
|
|
||||||
id = "UDIYL7V-OAZ2BI3-EJRAWFB-GZYVDWR-JNUYW3F-FFQ35MU-XBTGWEF-QD6K6QN";
|
|
||||||
folders = {
|
|
||||||
leyla_documents = {
|
|
||||||
folder = config.folders.leyla_documents;
|
|
||||||
path = "/mnt/sync/leyla/documents";
|
|
||||||
};
|
|
||||||
share = {
|
|
||||||
folder = config.folders.share;
|
|
||||||
path = "/mnt/sync/default/share";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
horizon = {
|
|
||||||
id = "OGPAEU6-5UR56VL-SP7YC4Y-IMVCRTO-XFD4CYN-Z6T5TZO-PFZNAT6-4MKWPQS";
|
|
||||||
folders = {
|
|
||||||
leyla_documents = {
|
|
||||||
folder = config.folders.leyla_documents;
|
|
||||||
path = "/mnt/sync/leyla/documents";
|
|
||||||
};
|
|
||||||
share = {
|
|
||||||
folder = config.folders.share;
|
|
||||||
path = "/mnt/sync/default/share";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
coven = {
|
|
||||||
id = "QGU7NN6-OMXTWVA-YCZ73S5-2O7ECTS-MUCTN4M-YH6WLEL-U4U577I-7PBNCA5";
|
|
||||||
folders = {
|
|
||||||
leyla_documents = {
|
|
||||||
folder = config.folders.leyla_documents;
|
|
||||||
};
|
|
||||||
share = {
|
|
||||||
folder = config.folders.share;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
ceder = {
|
|
||||||
id = "MGXUJBS-7AENXHB-7YQRNWG-QILKEJD-5462U2E-WAQW4R4-I2TVK5H-SMK6LAA";
|
|
||||||
folders = {
|
|
||||||
share = {
|
|
||||||
folder = config.folders.share;
|
|
||||||
};
|
|
||||||
leyla_documents = {
|
|
||||||
folder = config.folders.leyla_documents;
|
|
||||||
};
|
|
||||||
leyla_calendar = {
|
|
||||||
folder = config.folders.leyla_calendar;
|
|
||||||
};
|
|
||||||
leyla_notes = {
|
|
||||||
folder = config.folders.leyla_supernote_notes;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
emergent = {
|
|
||||||
id = "6MIDMKJ-7IFHXVX-FIR3YTB-KVE75LN-PA6IOTN-I257LWR-MMC4K6C-5H4SHQN";
|
|
||||||
folders = {
|
|
||||||
eve_records = {
|
|
||||||
folder = config.folders.eve_records;
|
|
||||||
};
|
|
||||||
share = {
|
|
||||||
folder = config.folders.share;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
shale = {
|
|
||||||
id = "AOAXEVD-QJ2IVRA-6G44Q7Q-TGUPXU2-FWWKOBH-DPKWC5N-LBAEHWJ-7EQF4AM";
|
|
||||||
folders = {
|
|
||||||
share = {
|
|
||||||
folder = config.folders.share;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
"/var/lib/sops-nix"
|
|
60
enviroments/client/default.nix
Normal file
60
enviroments/client/default.nix
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../common
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
|
||||||
|
# Enable CUPS to print documents.
|
||||||
|
printing.enable = true;
|
||||||
|
|
||||||
|
xserver = {
|
||||||
|
# Enable the X11 windowing system.
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Enable the GNOME Desktop Environment.
|
||||||
|
displayManager.gdm.enable = true;
|
||||||
|
desktopManager = {
|
||||||
|
gnome.enable = true;
|
||||||
|
xterm.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Get rid of xTerm
|
||||||
|
excludePackages = [ pkgs.xterm ];
|
||||||
|
|
||||||
|
# Configure keymap in X11
|
||||||
|
xkb = {
|
||||||
|
layout = "us,it,de";
|
||||||
|
variant = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
# If you want to use JACK applications, uncomment this
|
||||||
|
#jack.enable = true;
|
||||||
|
|
||||||
|
# use the example session manager (no others are packaged yet so this is enabled by default,
|
||||||
|
# no need to redefine it in your config for now)
|
||||||
|
#media-session.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# Enable sound with pipewire.
|
||||||
|
hardware.pulseaudio.enable = false;
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
# helvetica font
|
||||||
|
aileron
|
||||||
|
|
||||||
|
cachefilesd
|
||||||
|
|
||||||
|
gnomeExtensions.dash-to-dock
|
||||||
|
];
|
||||||
|
}
|
71
enviroments/common/default.nix
Normal file
71
enviroments/common/default.nix
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../users
|
||||||
|
];
|
||||||
|
|
||||||
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
nix.settings.trusted-users = [ "leyla" ];
|
||||||
|
|
||||||
|
# Enable networking
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
time.timeZone = "America/Chicago";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "en_US.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "en_US.UTF-8";
|
||||||
|
LC_MEASUREMENT = "en_US.UTF-8";
|
||||||
|
LC_MONETARY = "en_US.UTF-8";
|
||||||
|
LC_NAME = "en_US.UTF-8";
|
||||||
|
LC_NUMERIC = "en_US.UTF-8";
|
||||||
|
LC_PAPER = "en_US.UTF-8";
|
||||||
|
LC_TELEPHONE = "en_US.UTF-8";
|
||||||
|
LC_TIME = "en_US.UTF-8";
|
||||||
|
};
|
||||||
|
|
||||||
|
users.groups.users = {};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
openssh = {
|
||||||
|
enable = true;
|
||||||
|
ports = [ 22 ];
|
||||||
|
settings = {
|
||||||
|
PasswordAuthentication = false;
|
||||||
|
AllowUsers = [ "leyla" ]; # Allows all users by default. Can be [ "user1" "user2" ]
|
||||||
|
UseDns = true;
|
||||||
|
X11Forwarding = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sops = {
|
||||||
|
defaultSopsFile = ../../secrets/secrets.yaml;
|
||||||
|
defaultSopsFormat = "yaml";
|
||||||
|
gnupg.sshKeyPaths = [];
|
||||||
|
|
||||||
|
age ={
|
||||||
|
keyFile = "/var/lib/sops-nix/key.txt";
|
||||||
|
sshKeyPaths = [];
|
||||||
|
# generateKey = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
environment.sessionVariables = {
|
||||||
|
AGE_KEY_FILE_LOCATION = "/var/lib/sops-nix/";
|
||||||
|
};
|
||||||
|
|
||||||
|
# List packages installed in system profile.
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
wget
|
||||||
|
|
||||||
|
# version control
|
||||||
|
git
|
||||||
|
|
||||||
|
# system debuging tools
|
||||||
|
iputils
|
||||||
|
dnsutils
|
||||||
|
];
|
||||||
|
}
|
63
enviroments/server/default.nix
Normal file
63
enviroments/server/default.nix
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../common
|
||||||
|
];
|
||||||
|
|
||||||
|
services = let
|
||||||
|
headscaleDomain = "headscale.jan-leila.com";
|
||||||
|
in {
|
||||||
|
nfs.server = {
|
||||||
|
enable = true;
|
||||||
|
exports = ''
|
||||||
|
/home/leyla 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
|
||||||
|
/home/eve 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
|
||||||
|
/home/ester 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
|
||||||
|
/home/users 192.168.1.0/22(rw,sync,no_subtree_check,crossmnt)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
headscale = {
|
||||||
|
enable = true;
|
||||||
|
address = "0.0.0.0";
|
||||||
|
port = 8080;
|
||||||
|
settings = {
|
||||||
|
server_url = "https://${headscaleDomain}";
|
||||||
|
dns_config.base_domain = "jan-leila.com";
|
||||||
|
logtail.enabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nginx = {
|
||||||
|
enable = false; # TODO: enable this when you want to test all the configs
|
||||||
|
virtualHosts = {
|
||||||
|
${headscaleDomain} = {
|
||||||
|
forceSSL = true;
|
||||||
|
enableACME = true;
|
||||||
|
locations."/" = {
|
||||||
|
proxyPass =
|
||||||
|
"http://localhost:${toString config.services.headscale.port}";
|
||||||
|
proxyWebsockets = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
security.acme = {
|
||||||
|
acceptTerms = true;
|
||||||
|
defaults.email = "jan-leila@protonmail.com";
|
||||||
|
};
|
||||||
|
|
||||||
|
# disable computer sleeping
|
||||||
|
systemd.targets = {
|
||||||
|
sleep.enable = false;
|
||||||
|
suspend.enable = false;
|
||||||
|
hibernate.enable = false;
|
||||||
|
hybrid-sleep.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 2049 ];
|
||||||
|
|
||||||
|
environment.systemPackages = [ config.services.headscale.package ];
|
||||||
|
}
|
273
flake.lock
generated
273
flake.lock
generated
|
@ -7,11 +7,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748832438,
|
"lastModified": 1725377834,
|
||||||
"narHash": "sha256-/CtyLVfNaFP7PrOPrTEuGOJBIhcBKVQ91KiEbtXJi0A=",
|
"narHash": "sha256-tqoAO8oT6zEUDXte98cvA1saU9+1dLJQe3pMKLXv8ps=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "disko",
|
"repo": "disko",
|
||||||
"rev": "58d6e5a83fff9982d57e0a0a994d4e5c0af441e4",
|
"rev": "e55f9a8678adc02024a4877c2a403e3f6daf24fe",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -20,35 +20,14 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"firefox-addons": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"dir": "pkgs/firefox-addons",
|
|
||||||
"lastModified": 1749009805,
|
|
||||||
"narHash": "sha256-eRv4m89aPJvIAX9mZQcJM+l3sYG+OJvcLsiHvAvXalg=",
|
|
||||||
"owner": "rycee",
|
|
||||||
"repo": "nur-expressions",
|
|
||||||
"rev": "622c38d004cdded682d9a5ab7323181dc6efb0c1",
|
|
||||||
"type": "gitlab"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"dir": "pkgs/firefox-addons",
|
|
||||||
"owner": "rycee",
|
|
||||||
"repo": "nur-expressions",
|
|
||||||
"type": "gitlab"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1747046372,
|
"lastModified": 1696426674,
|
||||||
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||||
"owner": "edolstra",
|
"owner": "edolstra",
|
||||||
"repo": "flake-compat",
|
"repo": "flake-compat",
|
||||||
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -62,11 +41,11 @@
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1731533236,
|
"lastModified": 1710146030,
|
||||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -75,39 +54,6 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flake-utils_2": {
|
|
||||||
"inputs": {
|
|
||||||
"systems": "systems_2"
|
|
||||||
},
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flakey-profile": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1712898590,
|
|
||||||
"narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=",
|
|
||||||
"owner": "lf-",
|
|
||||||
"repo": "flakey-profile",
|
|
||||||
"rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "lf-",
|
|
||||||
"repo": "flakey-profile",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -115,11 +61,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1749049052,
|
"lastModified": 1725948275,
|
||||||
"narHash": "sha256-wIt8ZBc8diKg1H5ibi3Bw9HUcPR2w3xy4ddcuzjgLb0=",
|
"narHash": "sha256-4QOPemDQ9VRLQaAdWuvdDBhh+lEUOAnSMHhdr4nS1mk=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "ffab96a8b4a523c4b5e2645ee09e95a75cbdbfab",
|
"rev": "e5fa72bad0c6f533e8d558182529ee2acc9454fe",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -128,110 +74,20 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"impermanence": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1737831083,
|
|
||||||
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "impermanence",
|
|
||||||
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "impermanence",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lix": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1746827285,
|
|
||||||
"narHash": "sha256-hsFe4Tsqqg4l+FfQWphDtjC79WzNCZbEFhHI8j2KJzw=",
|
|
||||||
"rev": "47aad376c87e2e65967f17099277428e4b3f8e5a",
|
|
||||||
"type": "tarball",
|
|
||||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/47aad376c87e2e65967f17099277428e4b3f8e5a.tar.gz?rev=47aad376c87e2e65967f17099277428e4b3f8e5a"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "tarball",
|
|
||||||
"url": "https://git.lix.systems/lix-project/lix/archive/2.93.0.tar.gz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lix-module": {
|
|
||||||
"inputs": {
|
|
||||||
"flake-utils": "flake-utils",
|
|
||||||
"flakey-profile": "flakey-profile",
|
|
||||||
"lix": "lix",
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1746838955,
|
|
||||||
"narHash": "sha256-11R4K3iAx4tLXjUs+hQ5K90JwDABD/XHhsM9nkeS5N8=",
|
|
||||||
"rev": "cd2a9c028df820a83ca2807dc6c6e7abc3dfa7fc",
|
|
||||||
"type": "tarball",
|
|
||||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/cd2a9c028df820a83ca2807dc6c6e7abc3dfa7fc.tar.gz?rev=cd2a9c028df820a83ca2807dc6c6e7abc3dfa7fc"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "tarball",
|
|
||||||
"url": "https://git.lix.systems/lix-project/nixos-module/archive/2.93.0.tar.gz"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix-darwin": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1749012745,
|
|
||||||
"narHash": "sha256-Cax/k9ZRPKqTz18vZtmqGR45pHRXM+sDvEVd4V/3NrU=",
|
|
||||||
"owner": "LnL7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "fa6120c32f10bd2aac9e8c9a6e71528a9d9d823b",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "LnL7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix-syncthing": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1741849924,
|
|
||||||
"narHash": "sha256-5vyb1H6HtW24QVqfI56P4QVQP6vHh1jS9ULwnunCO94=",
|
|
||||||
"ref": "main",
|
|
||||||
"rev": "86bcb200c83b6a5d13b3583126b9d8dc6770613a",
|
|
||||||
"revCount": 6,
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.jan-leila.com/jan-leila/nix-syncthing"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"ref": "main",
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://git.jan-leila.com/jan-leila/nix-syncthing"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nix-vscode-extensions": {
|
"nix-vscode-extensions": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils_2",
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1749002682,
|
"lastModified": 1726623336,
|
||||||
"narHash": "sha256-v9K6RyPF/+4r/YJhjEH8y07VWE6Vj7Vl88E/K5m/uJ0=",
|
"narHash": "sha256-mslZtr0SPdHDLUM5VRV0ipQQ4G0Piv2Kk15490w4JXM=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-vscode-extensions",
|
"repo": "nix-vscode-extensions",
|
||||||
"rev": "46eb9c16d8ccfedf8bc648be03f9b2993fe3c994",
|
"rev": "b23683fef09032c85bb8b20f8ec72fb2f70075ff",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -242,11 +98,11 @@
|
||||||
},
|
},
|
||||||
"nixos-hardware": {
|
"nixos-hardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1749056381,
|
"lastModified": 1725885300,
|
||||||
"narHash": "sha256-QITcurR19KZlrCngBoCjsFF2BdYsiCG4UqmlrVcLb8Q=",
|
"narHash": "sha256-5RLEnou1/GJQl+Wd+Bxaj7QY7FFQ9wjnFq1VNEaxTmc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "029bd66faa180e11262dd1bc2732254c33415f52",
|
"rev": "166dee4f88a7e3ba1b7a243edb1aca822f00680e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -258,11 +114,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748929857,
|
"lastModified": 1725634671,
|
||||||
"narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=",
|
"narHash": "sha256-v3rIhsJBOMLR8e/RNWxr828tB+WywYIoajrZKFM+0Gg=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4",
|
"rev": "574d1eac1c200690e27b8eb4e24887f8df7ac27c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -272,51 +128,59 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1725762081,
|
||||||
|
"narHash": "sha256-vNv+aJUW5/YurRy1ocfvs4q/48yVESwlC/yHzjkZSP8=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "dc454045f5b5d814e5862a6d057e7bb5c29edc05",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "release-24.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1725534445,
|
||||||
|
"narHash": "sha256-Yd0FK9SkWy+ZPuNqUgmVPXokxDgMJoGuNpMEtkfcf84=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "9bb1e7571aadf31ddb4af77fc64b2d59580f9a39",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"disko": "disko",
|
"disko": "disko",
|
||||||
"firefox-addons": "firefox-addons",
|
|
||||||
"flake-compat": "flake-compat",
|
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"impermanence": "impermanence",
|
|
||||||
"lix-module": "lix-module",
|
|
||||||
"nix-darwin": "nix-darwin",
|
|
||||||
"nix-syncthing": "nix-syncthing",
|
|
||||||
"nix-vscode-extensions": "nix-vscode-extensions",
|
"nix-vscode-extensions": "nix-vscode-extensions",
|
||||||
"nixos-hardware": "nixos-hardware",
|
"nixos-hardware": "nixos-hardware",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
"secrets": "secrets",
|
|
||||||
"sops-nix": "sops-nix"
|
"sops-nix": "sops-nix"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"secrets": {
|
|
||||||
"flake": false,
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1749061163,
|
|
||||||
"narHash": "sha256-WflcbitH7ErNZBFqZCdy1ODUqKF51xbu2zYfqA35+1M=",
|
|
||||||
"ref": "refs/heads/main",
|
|
||||||
"rev": "1c5c059c0c7b6ce691993262fe10a2b63e1c31ba",
|
|
||||||
"revCount": 19,
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sops-nix": {
|
"sops-nix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": "nixpkgs_2",
|
||||||
"nixpkgs"
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1747603214,
|
"lastModified": 1725922448,
|
||||||
"narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=",
|
"narHash": "sha256-ruvh8tlEflRPifs5tlpa0gkttzq4UtgXkJQS7FusgFE=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd",
|
"rev": "cede1a08039178ac12957733e97ab1006c6b6892",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -339,21 +203,6 @@
|
||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"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"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|
194
flake.nix
194
flake.nix
|
@ -5,171 +5,71 @@
|
||||||
# base packages
|
# base packages
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
lix-module = {
|
# encrypt files that contain secreats that I would like to not encrypt
|
||||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.0.tar.gz";
|
sops-nix.url = "github:Mic92/sops-nix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# secret encryption
|
# declairtive disk configuration
|
||||||
sops-nix = {
|
|
||||||
url = "github:Mic92/sops-nix";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# self hosted repo of secrets file to further protect files in case of future encryption vulnerabilities
|
|
||||||
secrets = {
|
|
||||||
url = "git+ssh://git@git.jan-leila.com/jan-leila/nix-config-secrets.git";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# common config for syncthing
|
|
||||||
nix-syncthing = {
|
|
||||||
url = "git+https://git.jan-leila.com/jan-leila/nix-syncthing?ref=main";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# disk configurations
|
|
||||||
disko = {
|
disko = {
|
||||||
url = "github:nix-community/disko";
|
url = "github:nix-community/disko";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
# delete your darlings
|
# managment per user
|
||||||
impermanence = {
|
|
||||||
url = "github:nix-community/impermanence";
|
|
||||||
};
|
|
||||||
|
|
||||||
nix-darwin = {
|
|
||||||
url = "github:LnL7/nix-darwin";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# users home directories
|
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
# firefox extensions
|
# repo of hardware configs for prebuilt systems
|
||||||
firefox-addons = {
|
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||||
url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# vscode extensions
|
# vscode extensions
|
||||||
nix-vscode-extensions = {
|
nix-vscode-extensions = {
|
||||||
url = "github:nix-community/nix-vscode-extensions";
|
url = "github:nix-community/nix-vscode-extensions";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
# pregenerated hardware configurations
|
|
||||||
nixos-hardware = {
|
|
||||||
url = "github:NixOS/nixos-hardware/master";
|
|
||||||
};
|
|
||||||
|
|
||||||
# this is just here so that we have a lock on it for our dev shells
|
|
||||||
flake-compat = {
|
|
||||||
url = "github:edolstra/flake-compat";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = { self, nixpkgs, disko, nixos-hardware, ... }@inputs:
|
||||||
self,
|
let
|
||||||
nixpkgs,
|
forEachSystem = nixpkgs.lib.genAttrs [
|
||||||
sops-nix,
|
"aarch64-darwin"
|
||||||
nix-syncthing,
|
"aarch64-linux"
|
||||||
home-manager,
|
"x86_64-darwin"
|
||||||
impermanence,
|
"x86_64-linux"
|
||||||
...
|
];
|
||||||
} @ inputs: let
|
forEachPkgs = lambda: forEachSystem (system: lambda nixpkgs.legacyPackages.${system});
|
||||||
util = import ./util {inherit inputs;};
|
in
|
||||||
forEachPkgs = util.forEachPkgs;
|
{
|
||||||
|
packages = forEachPkgs (pkgs: import ./pkgs { inherit pkgs; });
|
||||||
|
|
||||||
mkNixosInstaller = util.mkNixosInstaller;
|
nixosConfigurations = {
|
||||||
mkNixosSystem = util.mkNixosSystem;
|
# Leyla Laptop
|
||||||
mkDarwinSystem = util.mkDarwinSystem;
|
horizon = nixpkgs.lib.nixosSystem {
|
||||||
mkHome = util.mkHome;
|
specialArgs = { inherit inputs; };
|
||||||
syncthingConfiguration = util.syncthingConfiguration;
|
modules = [
|
||||||
|
./hosts/horizon/configuration.nix
|
||||||
installerSystems = {
|
inputs.home-manager.nixosModules.default
|
||||||
basic = mkNixosInstaller "basic" [];
|
nixos-hardware.nixosModules.framework-11th-gen-intel
|
||||||
};
|
];
|
||||||
|
};
|
||||||
nixosSystems = {
|
# Leyla Desktop
|
||||||
horizon = mkNixosSystem "horizon";
|
twilight = nixpkgs.lib.nixosSystem {
|
||||||
twilight = mkNixosSystem "twilight";
|
specialArgs = { inherit inputs; };
|
||||||
defiant = mkNixosSystem "defiant";
|
modules = [
|
||||||
emergent = mkNixosSystem "emergent";
|
./hosts/twilight/configuration.nix
|
||||||
};
|
inputs.home-manager.nixosModules.default
|
||||||
|
];
|
||||||
darwinSystems = {
|
};
|
||||||
hesperium = mkDarwinSystem "hesperium";
|
# NAS Service
|
||||||
};
|
defiant = nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = { inherit inputs; };
|
||||||
homeSystems = {
|
modules = [
|
||||||
# stand alone home manager configurations here:
|
disko.nixosModules.disko
|
||||||
# name = mkHome "name"
|
./hosts/defiant/disko-config.nix
|
||||||
};
|
./hosts/defiant/configuration.nix
|
||||||
|
];
|
||||||
systemsHomes = nixpkgs.lib.attrsets.mergeAttrsList (
|
};
|
||||||
nixpkgs.lib.attrsets.mapAttrsToList (hostname: system: (
|
|
||||||
nixpkgs.lib.attrsets.mapAttrs' (user: _: {
|
|
||||||
name = "${user}@${hostname}";
|
|
||||||
value = mkHome {
|
|
||||||
user = user;
|
|
||||||
host = hostname;
|
|
||||||
system = system.pkgs.hostPlatform.system;
|
|
||||||
osConfig = system.config;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
system.config.home-manager.users
|
|
||||||
))
|
|
||||||
(nixosSystems // darwinSystems)
|
|
||||||
);
|
|
||||||
|
|
||||||
homeConfigurations =
|
|
||||||
systemsHomes
|
|
||||||
// homeSystems;
|
|
||||||
in {
|
|
||||||
formatter = forEachPkgs (system: pkgs: pkgs.alejandra);
|
|
||||||
|
|
||||||
# templates = import ./templates;
|
|
||||||
|
|
||||||
devShells = forEachPkgs (system: pkgs: {
|
|
||||||
default = pkgs.mkShell {
|
|
||||||
packages = with pkgs; [
|
|
||||||
# for version controlling this repo
|
|
||||||
git
|
|
||||||
# for formatting code in this repo
|
|
||||||
alejandra
|
|
||||||
# for editing secrets in the secrets repo
|
|
||||||
sops
|
|
||||||
# for viewing configuration options defined in this repo
|
|
||||||
nix-inspect
|
|
||||||
# for installing flakes from this repo onto other systems
|
|
||||||
nixos-anywhere
|
|
||||||
# for updating disko configurations
|
|
||||||
disko
|
|
||||||
# for viewing dconf entries
|
|
||||||
dconf-editor
|
|
||||||
];
|
|
||||||
|
|
||||||
SOPS_AGE_KEY_DIRECTORY = import ./const/sops_age_key_directory.nix;
|
|
||||||
|
|
||||||
shellHook = ''
|
|
||||||
git config core.hooksPath .hooks
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
});
|
};
|
||||||
|
|
||||||
installerConfigurations = installerSystems;
|
|
||||||
|
|
||||||
nixosConfigurations = nixosSystems;
|
|
||||||
|
|
||||||
darwinConfigurations = darwinSystems;
|
|
||||||
|
|
||||||
homeConfigurations = homeConfigurations;
|
|
||||||
|
|
||||||
syncthingConfiguration = syncthingConfiguration;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
57
hosts/defiant/configuration.nix
Normal file
57
hosts/defiant/configuration.nix
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
# server nas
|
||||||
|
{ config, pkgs, inputs, ... }:
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
|
||||||
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
../../enviroments/server
|
||||||
|
];
|
||||||
|
|
||||||
|
users.leyla.isThinUser = true;
|
||||||
|
|
||||||
|
boot.loader.grub = {
|
||||||
|
enable = true;
|
||||||
|
zfsSupport = true;
|
||||||
|
efiSupport = true;
|
||||||
|
efiInstallAsRemovable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
services = {
|
||||||
|
zfs = {
|
||||||
|
autoScrub.enable = true;
|
||||||
|
autoSnapshot.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# temp enable desktop enviroment for setup
|
||||||
|
# Enable the X11 windowing system.
|
||||||
|
xserver = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# Enable the GNOME Desktop Environment.
|
||||||
|
displayManager = {
|
||||||
|
gdm.enable = true;
|
||||||
|
};
|
||||||
|
desktopManager = {
|
||||||
|
gnome.enable = true;
|
||||||
|
xterm.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Get rid of xTerm
|
||||||
|
excludePackages = [ pkgs.xterm ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
}
|
136
hosts/defiant/disko-config.nix
Normal file
136
hosts/defiant/disko-config.nix
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
bootDisk = devicePath: {
|
||||||
|
type = "disk";
|
||||||
|
device = devicePath;
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
|
||||||
|
partitions = {
|
||||||
|
boot = {
|
||||||
|
size = "1M";
|
||||||
|
type = "EF02"; # for grub MBR
|
||||||
|
};
|
||||||
|
ESP = {
|
||||||
|
size = "1G";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
zfsDisk = devicePath: {
|
||||||
|
type = "disk";
|
||||||
|
device = devicePath;
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
zfs = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "zfs";
|
||||||
|
pool = "zroot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
cacheDisk = devicePath: swapSize: {
|
||||||
|
type = "disk";
|
||||||
|
device = devicePath;
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
encryptedSwap = {
|
||||||
|
size = swapSize;
|
||||||
|
content = {
|
||||||
|
type = "swap";
|
||||||
|
randomEncryption = true;
|
||||||
|
discardPolicy = "both";
|
||||||
|
resumeDevice = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
zfs = {
|
||||||
|
size = "100%";
|
||||||
|
content = {
|
||||||
|
type = "zfs";
|
||||||
|
pool = "zroot";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
boot = bootDisk "/dev/disk/by-path/pci-0000:23:00.3-usb-0:1:1.0-scsi-0:0:0:0";
|
||||||
|
|
||||||
|
hd_13_tb_a = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTCXVEB";
|
||||||
|
hd_13_tb_b = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTCXWSC";
|
||||||
|
hd_13_tb_c = zfsDisk "/dev/disk/by-id/ata-ST18000NE000-3G6101_ZVTD10EH";
|
||||||
|
|
||||||
|
# ssd_2_tb_a = cacheDisk "64G" "/dev/disk/by-id/XXX";
|
||||||
|
};
|
||||||
|
zpool = {
|
||||||
|
zroot = {
|
||||||
|
type = "zpool";
|
||||||
|
mode = {
|
||||||
|
topology = {
|
||||||
|
type = "topology";
|
||||||
|
vdev = [
|
||||||
|
{
|
||||||
|
# should this only mirror for this inital config with 3 drives we will used raidz2 for future configs???
|
||||||
|
mode = "mirror";
|
||||||
|
members = [
|
||||||
|
"hd_13_tb_a" "hd_13_tb_b" "hd_13_tb_c"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
cache = [ ];
|
||||||
|
# cache = [ "ssd_2_tb_a" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
options = {
|
||||||
|
ashift = "12";
|
||||||
|
};
|
||||||
|
|
||||||
|
rootFsOptions = {
|
||||||
|
encryption = "on";
|
||||||
|
keyformat = "hex";
|
||||||
|
keylocation = "prompt";
|
||||||
|
compression = "lz4";
|
||||||
|
xattr = "sa";
|
||||||
|
acltype = "posixacl";
|
||||||
|
"com.sun:auto-snapshot" = "false";
|
||||||
|
};
|
||||||
|
|
||||||
|
mountpoint = "/";
|
||||||
|
postCreateHook = "zfs list -t snapshot -H -o name | grep -E '^zroot@blank$' || zfs snapshot zroot@blank";
|
||||||
|
|
||||||
|
datasets = {
|
||||||
|
"nix" = {
|
||||||
|
type = "zfs_fs";
|
||||||
|
mountpoint = "/nix";
|
||||||
|
};
|
||||||
|
"home" = {
|
||||||
|
type = "zfs_fs";
|
||||||
|
mountpoint = "/mnt/home";
|
||||||
|
options = {
|
||||||
|
"com.sun:auto-snapshot" = "true";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"var" = {
|
||||||
|
type = "zfs_fs";
|
||||||
|
mountpoint = "/var";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
45
hosts/defiant/hardware-configuration.nix
Normal file
45
hosts/defiant/hardware-configuration.nix
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# 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" "aacraid" "ahci" "usbhid" "usb_storage" "sd_mod" ];
|
||||||
|
kernelModules = [ ];
|
||||||
|
};
|
||||||
|
kernelModules = [ "kvm-amd" ];
|
||||||
|
extraModulePackages = [ ];
|
||||||
|
|
||||||
|
supportedFilesystems = [ "zfs" ];
|
||||||
|
|
||||||
|
zfs.extraPools = [ "zroot" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# fileSystems."/" =
|
||||||
|
# { device = "/dev/disk/by-uuid/dc6a9664-80f2-4988-afd7-fee5bd3ee2ca";
|
||||||
|
# fsType = "ext4";
|
||||||
|
# };
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.eno2.useDHCP = lib.mkDefault true;
|
||||||
|
hostId = "c51763d6";
|
||||||
|
hostName = "defiant"; # Define your hostname.
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
49
hosts/horizon/configuration.nix
Normal file
49
hosts/horizon/configuration.nix
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# leyla laptop
|
||||||
|
{ config, pkgs, inputs, ... }:
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
|
||||||
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
../../enviroments/client
|
||||||
|
];
|
||||||
|
|
||||||
|
users = {
|
||||||
|
leyla.isFullUser = true;
|
||||||
|
ester.isFullUser = true;
|
||||||
|
eve.isFullUser = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# enabled virtualisation for docker
|
||||||
|
virtualisation.docker = {
|
||||||
|
enable = true;
|
||||||
|
rootless = {
|
||||||
|
enable = true;
|
||||||
|
setSocketVariable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
users.extraGroups.docker.members = [ "leyla" ];
|
||||||
|
|
||||||
|
# Enable touchpad support (enabled default in most desktopManager).
|
||||||
|
# services.xserver.libinput.enable = true;
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
# Open ports in the firewall.
|
||||||
|
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||||
|
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||||
|
# Or disable the firewall altogether.
|
||||||
|
# networking.firewall.enable = false;
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
}
|
104
hosts/horizon/hardware-configuration.nix
Normal file
104
hosts/horizon/hardware-configuration.nix
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
# 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" "thunderbolt" "nvme" "usb_storage" "sd_mod" ];
|
||||||
|
kernelModules = [ ];
|
||||||
|
};
|
||||||
|
kernelModules = [ "kvm-intel" "sg" ];
|
||||||
|
extraModulePackages = [ ];
|
||||||
|
|
||||||
|
# Bootloader.
|
||||||
|
loader = {
|
||||||
|
systemd-boot.enable = true;
|
||||||
|
efi.canTouchEfiVariables = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
hardware.graphics.enable = true;
|
||||||
|
|
||||||
|
fileSystems = {
|
||||||
|
"/" =
|
||||||
|
{ device = "/dev/disk/by-uuid/866d422b-f816-4ad9-9846-791839cb9337";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
"/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/E138-65B5";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
"/mnt/leyla_home" =
|
||||||
|
{
|
||||||
|
device = "defiant:/home/leyla";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "x-systemd.automount" "user" "noatime" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/mnt/eve_home" =
|
||||||
|
{
|
||||||
|
device = "defiant:/home/eve";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/mnt/ester_home" =
|
||||||
|
{
|
||||||
|
device = "defiant:/home/ester";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/mnt/users_home" =
|
||||||
|
{
|
||||||
|
device = "defiant:/home/users";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# "/mnt/legacy_leyla_home" =
|
||||||
|
# {
|
||||||
|
# device = "server.arpa:/home/leyla";
|
||||||
|
# fsType = "nfs";
|
||||||
|
# options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
# "/mnt/legacy_share_home" =
|
||||||
|
# {
|
||||||
|
# device = "server.arpa:/home/share";
|
||||||
|
# fsType = "nfs";
|
||||||
|
# options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
# "/mnt/legacy_docker_home" =
|
||||||
|
# {
|
||||||
|
# device = "server.arpa:/home/docker";
|
||||||
|
# fsType = "nfs";
|
||||||
|
# options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=600" ];
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
services.cachefilesd.enable = true;
|
||||||
|
|
||||||
|
swapDevices =
|
||||||
|
[ { device = "/dev/disk/by-uuid/be98e952-a072-4c3a-8c12-69500b5a2fff"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
useDHCP = lib.mkDefault true;
|
||||||
|
hostName = "horizon"; # Define your hostname.
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
42
hosts/twilight/configuration.nix
Normal file
42
hosts/twilight/configuration.nix
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# leyla laptop
|
||||||
|
{ config, pkgs, inputs, ... }:
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
|
||||||
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
../../enviroments/client
|
||||||
|
];
|
||||||
|
|
||||||
|
users = {
|
||||||
|
leyla = {
|
||||||
|
isFullUser = true;
|
||||||
|
hasPiperMouse = true;
|
||||||
|
hasOpenRGBHardware = true;
|
||||||
|
hasViaKeyboard = true;
|
||||||
|
hasGPU = true;
|
||||||
|
};
|
||||||
|
ester.isFullUser = true;
|
||||||
|
eve.isFullUser = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# enabled virtualisation for docker
|
||||||
|
# virtualisation.docker.enable = true;
|
||||||
|
|
||||||
|
# Enable touchpad support (enabled default in most desktopManager).
|
||||||
|
# services.xserver.libinput.enable = true;
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
# This value determines the NixOS release from which the default
|
||||||
|
# settings for stateful data, like file locations and database versions
|
||||||
|
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||||
|
# this value at the release version of the first install of this system.
|
||||||
|
# Before changing this value read the documentation for this option
|
||||||
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
|
system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
}
|
119
hosts/twilight/hardware-configuration.nix
Normal file
119
hosts/twilight/hardware-configuration.nix
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
# 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 = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ];
|
||||||
|
kernelModules = [ ];
|
||||||
|
};
|
||||||
|
kernelModules = [ "kvm-amd" "sg" ];
|
||||||
|
extraModulePackages = [ ];
|
||||||
|
|
||||||
|
# Bootloader.
|
||||||
|
loader = {
|
||||||
|
systemd-boot.enable = true;
|
||||||
|
efi.canTouchEfiVariables = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.xserver = {
|
||||||
|
# Load nvidia driver for Xorg and Wayland
|
||||||
|
videoDrivers = ["nvidia"];
|
||||||
|
|
||||||
|
# Use X instead of wayland for gaming reasons
|
||||||
|
displayManager.gdm.wayland = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
# Enable OpenGL
|
||||||
|
graphics.enable = true;
|
||||||
|
|
||||||
|
# install graphics drivers
|
||||||
|
nvidia = {
|
||||||
|
# Modesetting is required.
|
||||||
|
modesetting.enable = true;
|
||||||
|
|
||||||
|
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
||||||
|
# Enable this if you have graphical corruption issues or application crashes after waking
|
||||||
|
# up from sleep. This fixes it by saving the entire VRAM memory to /tmp/ instead
|
||||||
|
# of just the bare essentials.
|
||||||
|
powerManagement.enable = false;
|
||||||
|
|
||||||
|
# Fine-grained power management. Turns off GPU when not in use.
|
||||||
|
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
||||||
|
powerManagement.finegrained = false;
|
||||||
|
|
||||||
|
# Use the NVidia open source kernel module (not to be confused with the
|
||||||
|
# independent third-party "nouveau" open source driver).
|
||||||
|
# Support is limited to the Turing and later architectures. Full list of
|
||||||
|
# supported GPUs is at:
|
||||||
|
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
||||||
|
# Only available from driver 515.43.04+
|
||||||
|
# Currently alpha-quality/buggy, so false is currently the recommended setting.
|
||||||
|
open = false;
|
||||||
|
|
||||||
|
# Enable the Nvidia settings menu,
|
||||||
|
# accessible via `nvidia-settings`.
|
||||||
|
nvidiaSettings = true;
|
||||||
|
|
||||||
|
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.production;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems = {
|
||||||
|
"/" =
|
||||||
|
{ device = "/dev/disk/by-uuid/8be49c65-2b57-48f1-b74d-244d26061adb";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
"/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/3006-3867";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [ "fmask=0022" "dmask=0022" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/mnt/leyla_home" =
|
||||||
|
{
|
||||||
|
device = "server.arpa:/home/leyla";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/mnt/share_home" =
|
||||||
|
{
|
||||||
|
device = "server.arpa:/home/share";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "x-systemd.automount" "user" "nofail" "soft" "x-systemd.idle-timeout=600" "fsc" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
"/mnt/docker_home" =
|
||||||
|
{
|
||||||
|
device = "server.arpa:/home/docker";
|
||||||
|
fsType = "nfs";
|
||||||
|
options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=600" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
useDHCP = lib.mkDefault true;
|
||||||
|
hostName = "twilight"; # Define your hostname.
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
|
|
|
@ -39,7 +39,6 @@ if [ -z ${flake} ]; then
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# TODO: we might not need to copy the key over here anymore?
|
|
||||||
temp=$(mktemp -d)
|
temp=$(mktemp -d)
|
||||||
# Function to cleanup temporary directory on exit
|
# Function to cleanup temporary directory on exit
|
||||||
cleanup() {
|
cleanup() {
|
||||||
|
@ -48,8 +47,8 @@ cleanup() {
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
|
|
||||||
# copy key file to temp folder to copy over to target
|
# copy key file to temp folder to copy over to target
|
||||||
mkdir -p $temp$SOPS_AGE_KEY_DIRECTORY
|
mkdir -p $temp$AGE_KEY_FILE_LOCATION
|
||||||
cp -r $SOPS_AGE_KEY_DIRECTORY/* $temp$SOPS_AGE_KEY_DIRECTORY
|
cp -r $AGE_KEY_FILE_LOCATION/* $temp$AGE_KEY_FILE_LOCATION
|
||||||
|
|
||||||
# commit number in this is because the main branch of nixos-anywhere is broken right now
|
# commit number in this is because the main branch of nixos-anywhere is broken right now
|
||||||
nixos-anywhere --extra-files $temp --flake ".#$flake" ${user:-nixos}@$target
|
nix run github:nix-community/nixos-anywhere/b3b6bfebba35d55fba485ceda588984dec74c54f -- --extra-files $temp --flake ".#$flake" ${user:-nixos}@$target
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
# this folder is for modules that are common between nixos, home-manager, and darwin
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./overlays
|
|
||||||
./pkgs
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
# this folder is for derivation overlays
|
|
||||||
{...}: {
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{pkgs, ...}: {
|
|
||||||
nixpkgs.overlays = [
|
|
||||||
(final: prev: {
|
|
||||||
webtoon-dl =
|
|
||||||
pkgs.callPackage
|
|
||||||
./webtoon-dl.nix
|
|
||||||
{};
|
|
||||||
})
|
|
||||||
# TODO: this package always needs to be called with the --in-process-gpu flag for some reason, can we automate that?
|
|
||||||
(final: prev: {
|
|
||||||
prostudiomasters =
|
|
||||||
pkgs.callPackage
|
|
||||||
./prostudiomasters.nix
|
|
||||||
{};
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
fetchurl,
|
|
||||||
appimageTools,
|
|
||||||
}: let
|
|
||||||
pname = "prostudiomasters";
|
|
||||||
version = "2.5.6";
|
|
||||||
src = fetchurl {
|
|
||||||
url = "https://download.prostudiomasters.com/linux/ProStudioMasters-${version}.AppImage";
|
|
||||||
hash = "sha256-7owOwdcucFfl+JsVj+Seau2KOz0J4P/ep7WrBSNSmbs=";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
appimageTools.wrapType2 {
|
|
||||||
inherit pname version src;
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
buildGoModule,
|
|
||||||
fetchFromGitHub,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
buildGoModule rec {
|
|
||||||
pname = "webtoon-dl";
|
|
||||||
version = "0.0.10";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "robinovitch61";
|
|
||||||
repo = "webtoon-dl";
|
|
||||||
rev = "v${version}";
|
|
||||||
hash = "sha256-geVb3LFPZxPQYARZnaqOr5sgaN6mqkEX5ZiLvg8mF5k=";
|
|
||||||
};
|
|
||||||
|
|
||||||
vendorHash = "sha256-NTqUygJ6b6kTnLUnJqxCo/URzaRouPLACEPi2Ob1s9w=";
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
# this folder container modules that are for darwin only
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./home-manager
|
|
||||||
./users.nix
|
|
||||||
./system.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,2 +0,0 @@
|
||||||
# modules in this folder are to adapt home-manager modules configs to darwin-module configs
|
|
||||||
{...}: {}
|
|
|
@ -1,27 +0,0 @@
|
||||||
{self, ...}: {
|
|
||||||
system.configurationRevision = self.rev or self.dirtyRev or null;
|
|
||||||
|
|
||||||
nix = {
|
|
||||||
gc = {
|
|
||||||
automatic = true;
|
|
||||||
interval = [
|
|
||||||
{
|
|
||||||
Hour = 4;
|
|
||||||
Minute = 15;
|
|
||||||
Weekday = 7;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
options = "--delete-older-than 7d";
|
|
||||||
};
|
|
||||||
optimise = {
|
|
||||||
automatic = true;
|
|
||||||
interval = [
|
|
||||||
{
|
|
||||||
Hour = 4;
|
|
||||||
Minute = 15;
|
|
||||||
Weekday = 7;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
host = config.host;
|
|
||||||
in {
|
|
||||||
users = {
|
|
||||||
users = {
|
|
||||||
leyla = {
|
|
||||||
name = lib.mkForce host.users.leyla.name;
|
|
||||||
home = lib.mkForce "/home/${host.users.leyla.name}";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,73 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable;
|
|
||||||
in {
|
|
||||||
options.user.continue = {
|
|
||||||
enable = lib.mkEnableOption "should continue be enabled on this machine";
|
|
||||||
docs = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf (lib.types.submodule ({name, ...}: {
|
|
||||||
options = {
|
|
||||||
name = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = name;
|
|
||||||
};
|
|
||||||
startUrl = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
context = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf (lib.types.submodule ({name, ...}: {
|
|
||||||
options = {
|
|
||||||
provider = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = name;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
default = {
|
|
||||||
"code" = {};
|
|
||||||
"docs" = {};
|
|
||||||
"diff" = {};
|
|
||||||
"terminal" = {};
|
|
||||||
"problems" = {};
|
|
||||||
"folder" = {};
|
|
||||||
"codebase" = {};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config =
|
|
||||||
lib.mkIf ai-tooling-enabled
|
|
||||||
(lib.mkMerge [
|
|
||||||
{
|
|
||||||
home = {
|
|
||||||
file = {
|
|
||||||
".continue/config.yaml".source = (pkgs.formats.yaml {}).generate "continue-config" {
|
|
||||||
name = "Assistant";
|
|
||||||
version = "1.0.0";
|
|
||||||
schema = "v1";
|
|
||||||
models = lib.attrsets.attrValues osConfig.host.ai.models;
|
|
||||||
context = lib.attrsets.attrValues config.user.continue.context;
|
|
||||||
docs = lib.attrsets.attrValues config.user.continue.docs;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
(lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
".continue/index"
|
|
||||||
".continue/sessions"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
# this folder container modules that are for home manager only
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./sops.nix
|
|
||||||
./user.nix
|
|
||||||
./flipperzero.nix
|
|
||||||
./i18n.nix
|
|
||||||
./openssh.nix
|
|
||||||
./continue.nix
|
|
||||||
./programs
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
{lib, ...}: {
|
|
||||||
options.hardware.flipperzero.enable = lib.mkEnableOption "enable flipperzero hardware";
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options = {
|
|
||||||
i18n = {
|
|
||||||
defaultLocale = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "en_US.UTF-8";
|
|
||||||
example = "nl_NL.UTF-8";
|
|
||||||
description = ''
|
|
||||||
The default locale. It determines the language for program
|
|
||||||
messages, the format for dates and times, sort order, and so on.
|
|
||||||
It also determines the character set, such as UTF-8.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
extraLocaleSettings = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf lib.types.str;
|
|
||||||
default = {};
|
|
||||||
example = {
|
|
||||||
LC_MESSAGES = "en_US.UTF-8";
|
|
||||||
LC_TIME = "de_DE.UTF-8";
|
|
||||||
};
|
|
||||||
description = ''
|
|
||||||
A set of additional system-wide locale settings other than
|
|
||||||
`LANG` which can be configured with
|
|
||||||
{option}`i18n.defaultLocale`.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
home.sessionVariables =
|
|
||||||
{
|
|
||||||
LANG = config.i18n.defaultLocale;
|
|
||||||
}
|
|
||||||
// config.i18n.extraLocaleSettings;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,102 +0,0 @@
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.openssh = {
|
|
||||||
enable = lib.mkEnableOption "should we enable openssh";
|
|
||||||
authorizedKeys = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.str;
|
|
||||||
default = [];
|
|
||||||
};
|
|
||||||
hostKeys = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.attrs;
|
|
||||||
default = [];
|
|
||||||
example = [
|
|
||||||
{
|
|
||||||
type = "rsa";
|
|
||||||
bits = 4096;
|
|
||||||
path = "${config.home.username}_${osConfig.networking.hostName}_rsa";
|
|
||||||
rounds = 100;
|
|
||||||
openSSHFormat = true;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
type = "ed25519";
|
|
||||||
path = "${config.home.username}_${osConfig.networking.hostName}_ed25519";
|
|
||||||
rounds = 100;
|
|
||||||
comment = "key comment";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
description = ''
|
|
||||||
NixOS can automatically generate SSH host keys. This option
|
|
||||||
specifies the path, type and size of each key. See
|
|
||||||
{manpage}`ssh-keygen(1)` for supported types
|
|
||||||
and sizes. Paths are relative to home directory
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.openssh.enable (
|
|
||||||
lib.mkMerge [
|
|
||||||
(
|
|
||||||
lib.mkIf ((builtins.length config.programs.openssh.hostKeys) != 0) {
|
|
||||||
services.ssh-agent.enable = true;
|
|
||||||
programs.ssh = {
|
|
||||||
enable = true;
|
|
||||||
compression = true;
|
|
||||||
addKeysToAgent = "confirm";
|
|
||||||
extraConfig = lib.strings.concatLines (
|
|
||||||
builtins.map (hostKey: "IdentityFile ~/.ssh/${hostKey.path}") config.programs.openssh.hostKeys
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.services = builtins.listToAttrs (
|
|
||||||
builtins.map (hostKey:
|
|
||||||
lib.attrsets.nameValuePair "ssh-gen-keys-${hostKey.path}" {
|
|
||||||
Install = {
|
|
||||||
WantedBy = ["default.target"];
|
|
||||||
};
|
|
||||||
Service = let
|
|
||||||
path = "${config.home.homeDirectory}/.ssh/${hostKey.path}";
|
|
||||||
in {
|
|
||||||
Restart = "always";
|
|
||||||
Type = "simple";
|
|
||||||
ExecStart = "${
|
|
||||||
pkgs.writeShellScript "ssh-gen-keys" ''
|
|
||||||
if ! [ -s "${path}" ]; then
|
|
||||||
if ! [ -h "${path}" ]; then
|
|
||||||
rm -f "${path}"
|
|
||||||
fi
|
|
||||||
mkdir -p "$(dirname '${path}')"
|
|
||||||
chmod 0755 "$(dirname '${path}')"
|
|
||||||
${pkgs.openssh}/bin/ssh-keygen \
|
|
||||||
-t "${hostKey.type}" \
|
|
||||||
${lib.optionalString (hostKey ? bits) "-b ${toString hostKey.bits}"} \
|
|
||||||
${lib.optionalString (hostKey ? rounds) "-a ${toString hostKey.rounds}"} \
|
|
||||||
${lib.optionalString (hostKey ? comment) "-C '${hostKey.comment}'"} \
|
|
||||||
${lib.optionalString (hostKey ? openSSHFormat && hostKey.openSSHFormat) "-o"} \
|
|
||||||
-f "${path}" \
|
|
||||||
-N ""
|
|
||||||
chown ${config.home.username} ${path}*
|
|
||||||
chgrp ${config.home.username} ${path}*
|
|
||||||
fi
|
|
||||||
''
|
|
||||||
}";
|
|
||||||
};
|
|
||||||
})
|
|
||||||
config.programs.openssh.hostKeys
|
|
||||||
);
|
|
||||||
}
|
|
||||||
)
|
|
||||||
(lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
files = lib.lists.flatten (
|
|
||||||
builtins.map (hostKey: [".ssh/${hostKey.path}" ".ssh/${hostKey.path}.pub"]) config.programs.openssh.hostKeys
|
|
||||||
);
|
|
||||||
};
|
|
||||||
})
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.anki = {
|
|
||||||
enable = lib.mkEnableOption "enable anki";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.anki.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
anki
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.dataHome}/Anki2/"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.bitwarden = {
|
|
||||||
enable = lib.mkEnableOption "enable bitwarden";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.bitwarden.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
bitwarden
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/Bitwarden"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.bruno = {
|
|
||||||
enable = lib.mkEnableOption "enable bruno";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.bruno.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
bruno
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/bruno/"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.calibre = {
|
|
||||||
enable = lib.mkEnableOption "enable calibre";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.calibre.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
calibre
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/calibre"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.dbeaver-bin = {
|
|
||||||
enable = lib.mkEnableOption "enable dbeaver";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.dbeaver-bin.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
dbeaver-bin
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.dataHome}/DBeaverData/"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./firefox.nix
|
|
||||||
./signal.nix
|
|
||||||
./bitwarden.nix
|
|
||||||
./makemkv.nix
|
|
||||||
./obs.nix
|
|
||||||
./anki.nix
|
|
||||||
./qbittorrent.nix
|
|
||||||
./discord.nix
|
|
||||||
./obsidian.nix
|
|
||||||
./prostudiomasters.nix
|
|
||||||
./idea.nix
|
|
||||||
./protonvpn.nix
|
|
||||||
./calibre.nix
|
|
||||||
./bruno.nix
|
|
||||||
./dbeaver.nix
|
|
||||||
./steam.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.discord = {
|
|
||||||
enable = lib.mkEnableOption "enable discord";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.discord.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
discord
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/discord/"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,43 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
buildProfilePersistence = profile: {
|
|
||||||
directories = [
|
|
||||||
".mozilla/firefox/${profile}/extensions"
|
|
||||||
];
|
|
||||||
files = [
|
|
||||||
".mozilla/firefox/${profile}/cookies.sqlite"
|
|
||||||
".mozilla/firefox/${profile}/favicons.sqlite"
|
|
||||||
# Permissions and ${profileName} levels for each site
|
|
||||||
".mozilla/firefox/${profile}/permissions.sqlite"
|
|
||||||
".mozilla/firefox/${profile}/content-prefs.sqlite"
|
|
||||||
# Browser history and bookmarks
|
|
||||||
".mozilla/firefox/${profile}/places.sqlite"
|
|
||||||
# I guess this is useful?
|
|
||||||
# https://bugzilla.mozilla.org/show_bug.cgi?id=1511384
|
|
||||||
# https://developer.mozilla.org/en-US/docs/Web/API/Storage_API/Storage_quotas_and_eviction_criteria
|
|
||||||
".mozilla/firefox/${profile}/storage.sqlite"
|
|
||||||
# Extension configuration
|
|
||||||
".mozilla/firefox/${profile}/extension-settings.json"
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
config = lib.mkIf (config.programs.firefox.enable && osConfig.host.impermanence.enable) {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = lib.mkMerge (
|
|
||||||
(
|
|
||||||
lib.attrsets.mapAttrsToList
|
|
||||||
(profile: _: buildProfilePersistence profile)
|
|
||||||
config.programs.firefox.profiles
|
|
||||||
)
|
|
||||||
++ (
|
|
||||||
lib.lists.optional
|
|
||||||
((builtins.length (lib.attrsets.mapAttrsToList (key: value: value) config.programs.firefox.profiles)) == 0)
|
|
||||||
(buildProfilePersistence "default")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.jetbrains.idea-community = {
|
|
||||||
enable = lib.mkEnableOption "enable idea-community";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.jetbrains.idea-community.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
jetbrains.idea-community
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
# configuration
|
|
||||||
"${config.xdg.configHome}/JetBrains/"
|
|
||||||
# plugins
|
|
||||||
"${config.xdg.dataHome}/JetBrains/"
|
|
||||||
# System and Logs
|
|
||||||
"${config.xdg.cacheHome}/JetBrains/"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.makemkv = {
|
|
||||||
enable = lib.mkEnableOption "enable makemkv";
|
|
||||||
appKeyFile = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
};
|
|
||||||
destinationDir = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.makemkv.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
makemkv
|
|
||||||
];
|
|
||||||
|
|
||||||
sops.templates."MakeMKV.settings.conf".content = ''
|
|
||||||
app_DestinationDir = "${config.programs.makemkv.destinationDir}"
|
|
||||||
app_DestinationType = "2"
|
|
||||||
app_Key = "${config.programs.makemkv.appKeyFile}"
|
|
||||||
'';
|
|
||||||
|
|
||||||
home.file.".MakeMKV/settings.conf".source = config.lib.file.mkOutOfStoreSymlink config.sops.templates."MakeMKV.settings.conf".path;
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
".MakeMKV"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
config = lib.mkIf config.programs.obs-studio.enable (lib.mkMerge [
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
# TODO: map impermanence for obs
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
config = lib.mkIf config.programs.obsidian.enable (lib.mkMerge [
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/obsidian"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.prostudiomasters = {
|
|
||||||
enable = lib.mkEnableOption "enable prostudiomasters";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.prostudiomasters.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
prostudiomasters
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/ProStudioMasters"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.protonvpn-gui = {
|
|
||||||
enable = lib.mkEnableOption "enable protonvpn";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.protonvpn-gui.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
protonvpn-gui
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/protonvpn"
|
|
||||||
"${config.xdg.configHome}/Proton"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.qbittorrent = {
|
|
||||||
enable = lib.mkEnableOption "enable qbittorrent";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.qbittorrent.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
qbittorrent
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/qBittorrent"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.signal-desktop-bin = {
|
|
||||||
enable = lib.mkEnableOption "enable signal";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.signal-desktop-bin.enable (lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
signal-desktop-bin
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
"${config.xdg.configHome}/Signal"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.programs.steam = {
|
|
||||||
enable = lib.mkEnableOption "enable steam";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.programs.steam.enable (
|
|
||||||
lib.mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
steam
|
|
||||||
steam.run
|
|
||||||
];
|
|
||||||
}
|
|
||||||
(
|
|
||||||
lib.mkIf osConfig.host.impermanence.enable {
|
|
||||||
home.persistence."/persist${config.home.homeDirectory}" = {
|
|
||||||
directories = [
|
|
||||||
{
|
|
||||||
directory = "${config.xdg.dataHome}/Steam";
|
|
||||||
method = "symlink";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
allowOther = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
# TODO: bind impermanence config
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
{...}: {
|
|
||||||
config = {
|
|
||||||
sops = {
|
|
||||||
age.keyFile = "/var/lib/sops-nix/key.txt";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
osConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.user = {
|
|
||||||
isDesktopUser = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = osConfig.host.users.${config.home.username}.isDesktopUser;
|
|
||||||
};
|
|
||||||
isTerminalUser = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = osConfig.host.users.${config.home.username}.isTerminalUser;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
{lib, ...}: {
|
|
||||||
options.host = {
|
|
||||||
ai = {
|
|
||||||
enable = lib.mkEnableOption "should we use AI on this machine";
|
|
||||||
models = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf (lib.types.submodule ({name, ...}: {
|
|
||||||
options = {
|
|
||||||
name = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = name;
|
|
||||||
};
|
|
||||||
model = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
};
|
|
||||||
provider = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "ollama";
|
|
||||||
};
|
|
||||||
apiBase = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "http://localhost:11434";
|
|
||||||
};
|
|
||||||
roles = lib.mkOption {
|
|
||||||
type = lib.types.listOf (lib.types.enum [
|
|
||||||
"chat"
|
|
||||||
"autocomplete"
|
|
||||||
"embed"
|
|
||||||
"rerank"
|
|
||||||
"edit"
|
|
||||||
"apply"
|
|
||||||
"summarize"
|
|
||||||
]);
|
|
||||||
default = [];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
default = {};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
# TODO: configure ollama to download any modules listed in options.host.ai.models.{name}.model if options.host.ai.models.{name}.apiBase is localhost
|
|
||||||
# TODO: if we have any models that have a non localhost options.host.ai.models.{name}.apiBase then set services.ollama.enable to a lib.mkAfter true
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
# this folder container modules that are for nixos only
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./home-manager
|
|
||||||
./system.nix
|
|
||||||
./hardware.nix
|
|
||||||
./users.nix
|
|
||||||
./desktop.nix
|
|
||||||
./ssh.nix
|
|
||||||
./i18n.nix
|
|
||||||
./sync.nix
|
|
||||||
./impermanence.nix
|
|
||||||
./disko.nix
|
|
||||||
./ollama.nix
|
|
||||||
./ai.nix
|
|
||||||
./tailscale.nix
|
|
||||||
./steam.nix
|
|
||||||
./server
|
|
||||||
];
|
|
||||||
|
|
||||||
nixpkgs.config.permittedInsecurePackages = [
|
|
||||||
"dotnet-sdk-6.0.428"
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,75 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.host.desktop.enable = lib.mkEnableOption "should desktop configuration be enabled";
|
|
||||||
|
|
||||||
config = lib.mkMerge [
|
|
||||||
{
|
|
||||||
host.desktop.enable = lib.mkDefault true;
|
|
||||||
}
|
|
||||||
(lib.mkIf config.host.desktop.enable {
|
|
||||||
services = {
|
|
||||||
# Enable CUPS to print documents.
|
|
||||||
printing.enable = true;
|
|
||||||
|
|
||||||
xserver = {
|
|
||||||
# Enable the X11 windowing system.
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# Get rid of xTerm
|
|
||||||
desktopManager.xterm.enable = false;
|
|
||||||
excludePackages = with pkgs; [
|
|
||||||
xterm
|
|
||||||
atomix # puzzle game
|
|
||||||
cheese # webcam tool
|
|
||||||
epiphany # web browser
|
|
||||||
geary # email reader
|
|
||||||
gedit # text editor
|
|
||||||
gnome-characters
|
|
||||||
gnome-music
|
|
||||||
gnome-photos
|
|
||||||
gnome-tour
|
|
||||||
gnome-logs
|
|
||||||
gnome-maps
|
|
||||||
hitori # sudoku game
|
|
||||||
iagno # go game
|
|
||||||
tali # poker game
|
|
||||||
yelp # help viewer
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable the GNOME Desktop Environment.
|
|
||||||
displayManager.gdm.enable = true;
|
|
||||||
desktopManager.gnome.enable = true;
|
|
||||||
|
|
||||||
pipewire = {
|
|
||||||
enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
alsa.support32Bit = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
|
|
||||||
# If you want to use JACK applications, uncomment this
|
|
||||||
#jack.enable = true;
|
|
||||||
|
|
||||||
# use the example session manager (no others are packaged yet so this is enabled by default,
|
|
||||||
# no need to redefine it in your config for now)
|
|
||||||
#media-session.enable = true;
|
|
||||||
};
|
|
||||||
automatic-timezoned = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Enable sound with pipewire.
|
|
||||||
pulseaudio.enable = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# enable RealtimeKit for pulse audio
|
|
||||||
security.rtkit.enable = true;
|
|
||||||
# disable welcome tour
|
|
||||||
environment.gnome.excludePackages = [pkgs.gnome-tour];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,266 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
# there currently is a bug with disko that causes long disk names to be generated improperly this hash function should alleviate it when used for disk names instead of what we are defaulting to
|
|
||||||
# max gpt length is 36 and disk adds formats it like disk-xxxx-zfs which means we need to be 9 characters under that
|
|
||||||
hashDisk = drive: (builtins.substring 0 27 (builtins.hashString "sha256" drive));
|
|
||||||
|
|
||||||
vdevs =
|
|
||||||
builtins.map (
|
|
||||||
disks:
|
|
||||||
builtins.map (disk: lib.attrsets.nameValuePair (hashDisk disk) disk) disks
|
|
||||||
)
|
|
||||||
config.host.storage.pool.vdevs;
|
|
||||||
cache =
|
|
||||||
builtins.map (
|
|
||||||
disk: lib.attrsets.nameValuePair (hashDisk disk) disk
|
|
||||||
)
|
|
||||||
config.host.storage.pool.cache;
|
|
||||||
|
|
||||||
datasets = config.host.storage.pool.datasets // config.host.storage.pool.extraDatasets;
|
|
||||||
in {
|
|
||||||
options.host.storage = {
|
|
||||||
enable = lib.mkEnableOption "are we going create zfs disks with disko on this device";
|
|
||||||
encryption = lib.mkEnableOption "is the vdev going to be encrypted";
|
|
||||||
notifications = {
|
|
||||||
enable = lib.mkEnableOption "are notifications enabled";
|
|
||||||
host = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
description = "what is the host that we are going to send the email to";
|
|
||||||
};
|
|
||||||
port = lib.mkOption {
|
|
||||||
type = lib.types.port;
|
|
||||||
description = "what port is the host using to receive mail on";
|
|
||||||
};
|
|
||||||
to = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
description = "what account is the email going to be sent to";
|
|
||||||
};
|
|
||||||
user = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
description = "what user is the email going to be set from";
|
|
||||||
};
|
|
||||||
tokenFile = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
description = "file containing the password to be used by msmtp for notifications";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
pool = {
|
|
||||||
mode = lib.mkOption {
|
|
||||||
type = lib.types.str;
|
|
||||||
default = "raidz2";
|
|
||||||
description = "what level of redundancy should this pool have";
|
|
||||||
};
|
|
||||||
# list of drives in pool that will have a boot partition put onto them
|
|
||||||
bootDrives = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.str;
|
|
||||||
description = "list of disks that are going to have a boot partition installed on them";
|
|
||||||
default = lib.lists.flatten config.host.storage.pool.vdevs;
|
|
||||||
};
|
|
||||||
# shorthand for vdevs if you only have 1 vdev
|
|
||||||
drives = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.str;
|
|
||||||
description = "list of drives that are going to be in the vdev";
|
|
||||||
default = [];
|
|
||||||
};
|
|
||||||
# list of all drives in each vdev
|
|
||||||
vdevs = lib.mkOption {
|
|
||||||
type = lib.types.listOf (lib.types.listOf lib.types.str);
|
|
||||||
description = "list of disks that are going to be in";
|
|
||||||
default = [config.host.storage.pool.drives];
|
|
||||||
};
|
|
||||||
# list of cache drives for pool
|
|
||||||
cache = lib.mkOption {
|
|
||||||
type = lib.types.listOf lib.types.str;
|
|
||||||
description = "list of drives that are going to be used as cache";
|
|
||||||
default = [];
|
|
||||||
};
|
|
||||||
# Default datasets that are needed to make a functioning system
|
|
||||||
datasets = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf (inputs.disko.lib.subType {
|
|
||||||
types = {inherit (inputs.disko.lib.types) zfs_fs zfs_volume;};
|
|
||||||
});
|
|
||||||
default = {
|
|
||||||
"local" = {
|
|
||||||
type = "zfs_fs";
|
|
||||||
options.canmount = "off";
|
|
||||||
};
|
|
||||||
# nix directory needs to be available pre persist and doesn't need to be snapshotted or backed up
|
|
||||||
"local/system/nix" = {
|
|
||||||
type = "zfs_fs";
|
|
||||||
mountpoint = "/nix";
|
|
||||||
options = {
|
|
||||||
atime = "off";
|
|
||||||
relatime = "off";
|
|
||||||
canmount = "on";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# dataset for root that gets rolled back on every boot
|
|
||||||
"local/system/root" = {
|
|
||||||
type = "zfs_fs";
|
|
||||||
mountpoint = "/";
|
|
||||||
options = {
|
|
||||||
canmount = "on";
|
|
||||||
};
|
|
||||||
postCreateHook = ''
|
|
||||||
zfs snapshot rpool/local/system/root@blank
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
extraDatasets = lib.mkOption {
|
|
||||||
type = lib.types.attrsOf (inputs.disko.lib.subType {
|
|
||||||
types = {inherit (inputs.disko.lib.types) zfs_fs zfs_volume;};
|
|
||||||
});
|
|
||||||
description = "List of datasets to define";
|
|
||||||
default = {};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = lib.mkIf config.host.storage.enable {
|
|
||||||
programs.msmtp = lib.mkIf config.host.storage.notifications.enable {
|
|
||||||
enable = true;
|
|
||||||
setSendmail = true;
|
|
||||||
defaults = {
|
|
||||||
aliases = "/etc/aliases";
|
|
||||||
port = config.host.storage.notifications.port;
|
|
||||||
tls_trust_file = "/etc/ssl/certs/ca-certificates.crt";
|
|
||||||
tls = "on";
|
|
||||||
auth = "login";
|
|
||||||
tls_starttls = "off";
|
|
||||||
};
|
|
||||||
accounts = {
|
|
||||||
zfs_notifications = {
|
|
||||||
host = config.host.storage.notifications.host;
|
|
||||||
passwordeval = "cat ${config.host.storage.notifications.tokenFile}";
|
|
||||||
user = config.host.storage.notifications.user;
|
|
||||||
from = config.host.storage.notifications.user;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
services.zfs = {
|
|
||||||
autoScrub.enable = true;
|
|
||||||
autoSnapshot.enable = true;
|
|
||||||
|
|
||||||
zed = lib.mkIf config.host.storage.notifications.enable {
|
|
||||||
# this option is broken we are just going to disable it
|
|
||||||
enableMail = false;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
ZED_DEBUG_LOG = "/tmp/zed.debug.log";
|
|
||||||
ZED_EMAIL_ADDR = [config.host.storage.notifications.to];
|
|
||||||
ZED_EMAIL_PROG = "${pkgs.msmtp}/bin/msmtp";
|
|
||||||
ZED_EMAIL_OPTS = "@ADDRESS@";
|
|
||||||
|
|
||||||
ZED_NOTIFY_INTERVAL_SECS = 3600;
|
|
||||||
ZED_NOTIFY_VERBOSE = true;
|
|
||||||
|
|
||||||
ZED_USE_ENCLOSURE_LEDS = true;
|
|
||||||
ZED_SCRUB_AFTER_RESILVER = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
disko.devices = {
|
|
||||||
disk = (
|
|
||||||
builtins.listToAttrs (
|
|
||||||
builtins.map
|
|
||||||
(drive:
|
|
||||||
lib.attrsets.nameValuePair (drive.name) {
|
|
||||||
type = "disk";
|
|
||||||
device = "/dev/disk/by-id/${drive.value}";
|
|
||||||
content = {
|
|
||||||
type = "gpt";
|
|
||||||
partitions = {
|
|
||||||
ESP = lib.mkIf (builtins.elem drive.value config.host.storage.pool.bootDrives) {
|
|
||||||
# The 2GB here for the boot partition might be a bit overkill we probably only need like 1/4th of that but storage is cheap
|
|
||||||
size = "2G";
|
|
||||||
type = "EF00";
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "vfat";
|
|
||||||
mountpoint = "/boot";
|
|
||||||
mountOptions = ["umask=0077"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
zfs = {
|
|
||||||
size = "100%";
|
|
||||||
content = {
|
|
||||||
type = "zfs";
|
|
||||||
pool = "rpool";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
})
|
|
||||||
(
|
|
||||||
(lib.lists.flatten vdevs) ++ cache
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
zpool = {
|
|
||||||
rpool = {
|
|
||||||
type = "zpool";
|
|
||||||
mode = {
|
|
||||||
topology = {
|
|
||||||
type = "topology";
|
|
||||||
vdev = (
|
|
||||||
builtins.map (disks: {
|
|
||||||
mode = config.host.storage.pool.mode;
|
|
||||||
members =
|
|
||||||
builtins.map (disk: disk.name) disks;
|
|
||||||
})
|
|
||||||
vdevs
|
|
||||||
);
|
|
||||||
cache = builtins.map (disk: disk.name) cache;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
options = {
|
|
||||||
ashift = "12";
|
|
||||||
autotrim = "on";
|
|
||||||
};
|
|
||||||
|
|
||||||
rootFsOptions =
|
|
||||||
{
|
|
||||||
canmount = "off";
|
|
||||||
mountpoint = "none";
|
|
||||||
|
|
||||||
xattr = "sa";
|
|
||||||
acltype = "posixacl";
|
|
||||||
relatime = "on";
|
|
||||||
|
|
||||||
compression = "lz4";
|
|
||||||
|
|
||||||
"com.sun:auto-snapshot" = "false";
|
|
||||||
}
|
|
||||||
// (
|
|
||||||
lib.attrsets.optionalAttrs config.host.storage.encryption {
|
|
||||||
encryption = "on";
|
|
||||||
keyformat = "hex";
|
|
||||||
keylocation = "prompt";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
datasets = lib.mkMerge [
|
|
||||||
(
|
|
||||||
lib.attrsets.mapAttrs (name: value: {
|
|
||||||
type = value.type;
|
|
||||||
options = value.options;
|
|
||||||
mountpoint = value.mountpoint;
|
|
||||||
postCreateHook = value.postCreateHook;
|
|
||||||
})
|
|
||||||
datasets
|
|
||||||
)
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
options.host.hardware = {
|
|
||||||
piperMouse = {
|
|
||||||
enable = lib.mkEnableOption "host has a piper mouse";
|
|
||||||
};
|
|
||||||
viaKeyboard = {
|
|
||||||
enable = lib.mkEnableOption "host has a via keyboard";
|
|
||||||
};
|
|
||||||
openRGB = {
|
|
||||||
enable = lib.mkEnableOption "host has open rgb hardware";
|
|
||||||
};
|
|
||||||
graphicsAcceleration = {
|
|
||||||
enable = lib.mkEnableOption "host has a gpu for graphical acceleration";
|
|
||||||
};
|
|
||||||
directAccess = {
|
|
||||||
enable = lib.mkEnableOption "can a host be used on its own";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = lib.mkMerge [
|
|
||||||
(lib.mkIf config.host.hardware.piperMouse.enable {
|
|
||||||
services.ratbagd.enable = true;
|
|
||||||
})
|
|
||||||
(lib.mkIf config.host.hardware.viaKeyboard.enable {
|
|
||||||
hardware.keyboard.qmk.enable = true;
|
|
||||||
|
|
||||||
services.udev.packages = [pkgs.via];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
# modules in this folder are to adapt home-manager modules configs to nixos-module configs
|
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
./flipperzero.nix
|
|
||||||
./i18n.nix
|
|
||||||
./openssh.nix
|
|
||||||
./steam.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
home-users = lib.attrsets.mapAttrsToList (_: user: user) config.home-manager.users;
|
|
||||||
in {
|
|
||||||
hardware.flipperzero.enable = lib.lists.any (home-user: home-user.hardware.flipperzero.enable) home-users;
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue