Compare commits
9 Commits
5872d59084
...
weekly-202
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
28cb84aa3f | ||
|
|
ba7acaf360 | ||
|
|
13d1d3c6d9 | ||
|
|
66483c89ac | ||
|
|
32729627b1 | ||
|
|
848ca7ca90 | ||
|
|
72ea8a2da6 | ||
|
|
578fc60a5f | ||
|
|
30199ba69d |
@@ -1,9 +1,6 @@
|
|||||||
name: Build on Push
|
name: Build on Push
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
workflow_dispatch: # Allow manual trigger
|
workflow_dispatch: # Allow manual trigger
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -91,4 +88,3 @@ jobs:
|
|||||||
echo "✅ Build on push completed successfully!"
|
echo "✅ Build on push completed successfully!"
|
||||||
echo "- Built workstation, server, and emacs-vm configurations"
|
echo "- Built workstation, server, and emacs-vm configurations"
|
||||||
echo "- Pushed all builds to Atticd cache"
|
echo "- Pushed all builds to Atticd cache"
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
name: runner-smoke
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ubuntu-2404:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- name: Check OS
|
|
||||||
run: |
|
|
||||||
cat /etc/os-release
|
|
||||||
uname -a
|
|
||||||
@@ -38,9 +38,7 @@
|
|||||||
};
|
};
|
||||||
i18n = {
|
i18n = {
|
||||||
defaultLocale = "en_CA.UTF-8";
|
defaultLocale = "en_CA.UTF-8";
|
||||||
extraLocaleSettings = {
|
extraLocaleSettings.LC_MONETARY = "es_MX.UTF-8";
|
||||||
LC_MONETARY = "es_MX.UTF-8";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
console = {
|
console = {
|
||||||
font = "Lat2-Terminus16";
|
font = "Lat2-Terminus16";
|
||||||
@@ -48,10 +46,6 @@
|
|||||||
};
|
};
|
||||||
security = {
|
security = {
|
||||||
polkit.enable = true;
|
polkit.enable = true;
|
||||||
sudo-rs = {
|
|
||||||
enable = true;
|
|
||||||
wheelNeedsPassword = false;
|
|
||||||
};
|
|
||||||
pam.loginLimits = [
|
pam.loginLimits = [
|
||||||
{
|
{
|
||||||
domain = "*";
|
domain = "*";
|
||||||
@@ -60,6 +54,10 @@
|
|||||||
value = "8192";
|
value = "8192";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
sudo-rs = {
|
||||||
|
enable = true;
|
||||||
|
wheelNeedsPassword = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
users = {
|
users = {
|
||||||
mutableUsers = false;
|
mutableUsers = false;
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
sops.secrets = lib.mkIf config.my.secureHost {
|
||||||
|
derek-password.neededForUsers = true;
|
||||||
|
};
|
||||||
my = {
|
my = {
|
||||||
stylix = enableForDerek;
|
stylix = enableForDerek;
|
||||||
emacs = enableForDerek;
|
emacs = enableForDerek;
|
||||||
@@ -34,9 +37,6 @@ in
|
|||||||
multimedia = enableForDerek;
|
multimedia = enableForDerek;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
sops.secrets = lib.mkIf config.my.secureHost {
|
|
||||||
derek-password.neededForUsers = true;
|
|
||||||
};
|
|
||||||
services = {
|
services = {
|
||||||
tailscale.enable = true;
|
tailscale.enable = true;
|
||||||
sunshine = {
|
sunshine = {
|
||||||
@@ -48,8 +48,7 @@ in
|
|||||||
};
|
};
|
||||||
networking.nftables = {
|
networking.nftables = {
|
||||||
enable = true;
|
enable = true;
|
||||||
tables = {
|
tables.local-uid-block = {
|
||||||
local-uid-block = {
|
|
||||||
family = "inet";
|
family = "inet";
|
||||||
content = ''
|
content = ''
|
||||||
chain output {
|
chain output {
|
||||||
@@ -60,7 +59,6 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
users.users.bearded_dragonn = {
|
users.users.bearded_dragonn = {
|
||||||
uid = 1002;
|
uid = 1002;
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
|
|||||||
@@ -39,27 +39,6 @@ in
|
|||||||
];
|
];
|
||||||
home.stateVersion = "23.05";
|
home.stateVersion = "23.05";
|
||||||
programs = {
|
programs = {
|
||||||
direnv = {
|
|
||||||
enable = true;
|
|
||||||
enableBashIntegration = shellType == "bash";
|
|
||||||
enableZshIntegration = shellType == "zsh";
|
|
||||||
nix-direnv.enable = true;
|
|
||||||
};
|
|
||||||
git = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
pull.rebase = true;
|
|
||||||
init.defaultBranch = "main";
|
|
||||||
user = {
|
|
||||||
email = if osConfig == null then userEmail else osConfig.my.email;
|
|
||||||
name = "Danilo Reyes";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
delta = {
|
|
||||||
enable = true;
|
|
||||||
enableGitIntegration = true;
|
|
||||||
};
|
|
||||||
ssh.enableDefaultConfig = false;
|
ssh.enableDefaultConfig = false;
|
||||||
bash = lib.mkIf (shellType == "bash") {
|
bash = lib.mkIf (shellType == "bash") {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -85,6 +64,27 @@ in
|
|||||||
ignoreAllDups = true;
|
ignoreAllDups = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
delta = {
|
||||||
|
enable = true;
|
||||||
|
enableGitIntegration = true;
|
||||||
|
};
|
||||||
|
direnv = {
|
||||||
|
enable = true;
|
||||||
|
enableBashIntegration = shellType == "bash";
|
||||||
|
enableZshIntegration = shellType == "zsh";
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
git = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
pull.rebase = true;
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
user = {
|
||||||
|
email = if osConfig == null then userEmail else osConfig.my.email;
|
||||||
|
name = "Danilo Reyes";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
xdg = {
|
xdg = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -21,13 +21,11 @@ in
|
|||||||
description = "Users to apply Stylix theming for";
|
description = "Users to apply Stylix theming for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = {
|
config.stylix = {
|
||||||
stylix = {
|
|
||||||
inherit (scheme) image polarity;
|
inherit (scheme) image polarity;
|
||||||
enable = true;
|
enable = true;
|
||||||
autoEnable = cfg.enable;
|
autoEnable = cfg.enable;
|
||||||
targets.qt.platform = lib.mkForce "qtct";
|
targets.qt.platform = lib.mkForce "qtct";
|
||||||
}
|
}
|
||||||
// lib.optionalAttrs (scheme ? base16Scheme) { inherit (scheme) base16Scheme; };
|
// lib.optionalAttrs (scheme ? base16Scheme) { inherit (scheme) base16Scheme; };
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
- Minimize comments; prefer clear naming and shared helpers (`modules/factories/mkserver.nix`, `modules/factories/mkscript.nix`) to avoid duplication.
|
- Minimize comments; prefer clear naming and shared helpers (`modules/factories/mkserver.nix`, `modules/factories/mkscript.nix`) to avoid duplication.
|
||||||
- Use business-level, technology-agnostic language in AI docs; reserve implementation detail for module code.
|
- Use business-level, technology-agnostic language in AI docs; reserve implementation detail for module code.
|
||||||
- Nix structure: flatten single-child attribute sets into their full path; keep multi-child sets nested for readability; merge siblings under a shared parent; flatten the shallowest subtree first to reduce indentation without losing clarity.
|
- Nix structure: flatten single-child attribute sets into their full path; keep multi-child sets nested for readability; merge siblings under a shared parent; flatten the shallowest subtree first to reduce indentation without losing clarity.
|
||||||
|
- Nix attribute ordering: prefer `options` before `config` in module bodies; inside attribute sets keep `inherit` statements first, then boolean leaf assignments, then other leaf assignments, then nested attribute sets; when simple leaves and nested children share a parent, place the simple leaves first.
|
||||||
```nix
|
```nix
|
||||||
config.services.jellyfin.enable = true; # preferred single-leaf form
|
config.services.jellyfin.enable = true; # preferred single-leaf form
|
||||||
config.services = {
|
config.services = {
|
||||||
@@ -31,6 +32,20 @@ config.services = {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
options.my.example.enable = lib.mkEnableOption "example";
|
||||||
|
config = lib.mkIf config.my.example.enable {
|
||||||
|
services.example = {
|
||||||
|
enable = true;
|
||||||
|
port = 1234;
|
||||||
|
nested = {
|
||||||
|
value = "x";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Terminology and Naming Standards
|
## Terminology and Naming Standards
|
||||||
- Module: Prefer a feature directory under `modules/<category>/<name>/` with `nixos.nix` for system concerns and `home.nix` for Home Manager concerns. Legacy flat modules at `modules/<category>/<name>.nix` remain valid during migration.
|
- Module: Prefer a feature directory under `modules/<category>/<name>/` with `nixos.nix` for system concerns and `home.nix` for Home Manager concerns. Legacy flat modules at `modules/<category>/<name>.nix` remain valid during migration.
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
output.mode = "auto";
|
||||||
extractor = {
|
extractor = {
|
||||||
skip = "abort:5";
|
skip = "abort:5";
|
||||||
cookies = [
|
cookies = [
|
||||||
@@ -8,6 +9,29 @@
|
|||||||
];
|
];
|
||||||
retries = 10;
|
retries = 10;
|
||||||
sleep-request = 0;
|
sleep-request = 0;
|
||||||
|
pinterest.directory = [
|
||||||
|
"{board[owner][username]}"
|
||||||
|
"{board[name]}"
|
||||||
|
];
|
||||||
|
exhentai.directory = [
|
||||||
|
"{category}"
|
||||||
|
"{title}"
|
||||||
|
];
|
||||||
|
gfycat.format = "webm";
|
||||||
|
imgur.mp4 = true;
|
||||||
|
paheal.directory = [
|
||||||
|
"Husbands"
|
||||||
|
"{search_tags}"
|
||||||
|
];
|
||||||
|
rule34.directory = [
|
||||||
|
"Husbands"
|
||||||
|
"{search_tags}"
|
||||||
|
];
|
||||||
|
e621.directory = [
|
||||||
|
"Husbands"
|
||||||
|
"{search_tags}"
|
||||||
|
];
|
||||||
|
baraag.directory = [ "{account[username]}" ];
|
||||||
directlink = {
|
directlink = {
|
||||||
filename = "{filename}.{extension}";
|
filename = "{filename}.{extension}";
|
||||||
directory = [ ];
|
directory = [ ];
|
||||||
@@ -35,10 +59,6 @@
|
|||||||
"{owner[username]}"
|
"{owner[username]}"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
pinterest.directory = [
|
|
||||||
"{board[owner][username]}"
|
|
||||||
"{board[name]}"
|
|
||||||
];
|
|
||||||
wikifeet = {
|
wikifeet = {
|
||||||
page-reverse = true;
|
page-reverse = true;
|
||||||
directory = [
|
directory = [
|
||||||
@@ -55,6 +75,11 @@
|
|||||||
parent-directory = true;
|
parent-directory = true;
|
||||||
directory = [ "{username}" ];
|
directory = [ "{username}" ];
|
||||||
previews = true;
|
previews = true;
|
||||||
|
tagged.directory = [
|
||||||
|
"{username}"
|
||||||
|
"tagged"
|
||||||
|
"{tagged_username}"
|
||||||
|
];
|
||||||
highlights = {
|
highlights = {
|
||||||
reverse = true;
|
reverse = true;
|
||||||
directory = [ "{username}" ];
|
directory = [ "{username}" ];
|
||||||
@@ -63,11 +88,6 @@
|
|||||||
reverse = true;
|
reverse = true;
|
||||||
directory = [ "{username}" ];
|
directory = [ "{username}" ];
|
||||||
};
|
};
|
||||||
tagged.directory = [
|
|
||||||
"{username}"
|
|
||||||
"tagged"
|
|
||||||
"{tagged_username}"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
kemonoparty = {
|
kemonoparty = {
|
||||||
limit-rate = "200k-300k";
|
limit-rate = "200k-300k";
|
||||||
@@ -79,10 +99,6 @@
|
|||||||
"{user}"
|
"{user}"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
exhentai.directory = [
|
|
||||||
"{category}"
|
|
||||||
"{title}"
|
|
||||||
];
|
|
||||||
tumblr = {
|
tumblr = {
|
||||||
external = true;
|
external = true;
|
||||||
inline = true;
|
inline = true;
|
||||||
@@ -132,7 +148,6 @@
|
|||||||
external = true;
|
external = true;
|
||||||
directory = [ "{userinfo[username]}" ];
|
directory = [ "{userinfo[username]}" ];
|
||||||
};
|
};
|
||||||
gfycat.format = "webm";
|
|
||||||
reddit = {
|
reddit = {
|
||||||
user-agent = "Python:gallery-dl:v1.0 (by /u/captainjawz)";
|
user-agent = "Python:gallery-dl:v1.0 (by /u/captainjawz)";
|
||||||
client-id = "T7nZ6WZ3_onJWBhLP8r08g";
|
client-id = "T7nZ6WZ3_onJWBhLP8r08g";
|
||||||
@@ -143,20 +158,6 @@
|
|||||||
reverse = true;
|
reverse = true;
|
||||||
directory = [ "{userName}" ];
|
directory = [ "{userName}" ];
|
||||||
};
|
};
|
||||||
imgur.mp4 = true;
|
|
||||||
paheal.directory = [
|
|
||||||
"Husbands"
|
|
||||||
"{search_tags}"
|
|
||||||
];
|
|
||||||
rule34.directory = [
|
|
||||||
"Husbands"
|
|
||||||
"{search_tags}"
|
|
||||||
];
|
|
||||||
e621.directory = [
|
|
||||||
"Husbands"
|
|
||||||
"{search_tags}"
|
|
||||||
];
|
|
||||||
baraag.directory = [ "{account[username]}" ];
|
|
||||||
pixiv = {
|
pixiv = {
|
||||||
directory = [ "{user[account]} - {user[id]}" ];
|
directory = [ "{user[account]} - {user[id]}" ];
|
||||||
ugoira = true;
|
ugoira = true;
|
||||||
@@ -275,7 +276,6 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
output.mode = "auto";
|
|
||||||
downloader = {
|
downloader = {
|
||||||
part = true;
|
part = true;
|
||||||
part-directory = "/home/jawz/.cache/gallery-dl";
|
part-directory = "/home/jawz/.cache/gallery-dl";
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
|
users.users.jawz.packages = builtins.attrValues {
|
||||||
|
inherit (pkgs)
|
||||||
|
adw-gtk3 # theme legacy applications
|
||||||
|
papirus-icon-theme # icon theme
|
||||||
|
;
|
||||||
|
};
|
||||||
services = {
|
services = {
|
||||||
libinput.enable = true;
|
libinput.enable = true;
|
||||||
xserver = {
|
xserver = {
|
||||||
@@ -12,10 +18,4 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
style = "adwaita";
|
style = "adwaita";
|
||||||
};
|
};
|
||||||
users.users.jawz.packages = builtins.attrValues {
|
|
||||||
inherit (pkgs)
|
|
||||||
adw-gtk3 # theme legacy applications
|
|
||||||
papirus-icon-theme # icon theme
|
|
||||||
;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,11 +23,6 @@ in
|
|||||||
};
|
};
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
qt.enable = true;
|
qt.enable = true;
|
||||||
services = {
|
|
||||||
gvfs.enable = true;
|
|
||||||
displayManager.gdm.enable = true;
|
|
||||||
desktopManager.gnome.enable = true;
|
|
||||||
};
|
|
||||||
environment.gnome.excludePackages = builtins.attrValues {
|
environment.gnome.excludePackages = builtins.attrValues {
|
||||||
inherit (pkgs)
|
inherit (pkgs)
|
||||||
baobab
|
baobab
|
||||||
@@ -55,5 +50,10 @@ in
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
services = {
|
||||||
|
gvfs.enable = true;
|
||||||
|
displayManager.gdm.enable = true;
|
||||||
|
desktopManager.gnome.enable = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,9 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
programs = {
|
programs = {
|
||||||
|
waybar = waybarConfig.programs.waybar // {
|
||||||
|
style = waybarStyle;
|
||||||
|
};
|
||||||
wofi = {
|
wofi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
@@ -19,29 +22,10 @@ in
|
|||||||
width = "30%";
|
width = "30%";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
waybar = waybarConfig.programs.waybar // {
|
|
||||||
style = waybarStyle;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
general = {
|
|
||||||
gaps_in = 5;
|
|
||||||
gaps_out = 10;
|
|
||||||
border_size = 3;
|
|
||||||
layout = "dwindle";
|
|
||||||
};
|
|
||||||
misc = {
|
|
||||||
disable_hyprland_logo = true;
|
|
||||||
disable_splash_rendering = true;
|
|
||||||
force_default_wallpaper = 0;
|
|
||||||
};
|
|
||||||
dwindle = {
|
|
||||||
pseudotile = true;
|
|
||||||
preserve_split = true;
|
|
||||||
force_split = 2;
|
|
||||||
};
|
|
||||||
bind = [
|
bind = [
|
||||||
"${mod}, return, exec, ghostty"
|
"${mod}, return, exec, ghostty"
|
||||||
"${mod}, Q, killactive,"
|
"${mod}, Q, killactive,"
|
||||||
@@ -108,6 +92,22 @@ in
|
|||||||
"${mod}, mouse:272, movewindow"
|
"${mod}, mouse:272, movewindow"
|
||||||
"${mod}, mouse:273, resizewindow"
|
"${mod}, mouse:273, resizewindow"
|
||||||
];
|
];
|
||||||
|
general = {
|
||||||
|
gaps_in = 5;
|
||||||
|
gaps_out = 10;
|
||||||
|
border_size = 3;
|
||||||
|
layout = "dwindle";
|
||||||
|
};
|
||||||
|
misc = {
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
disable_splash_rendering = true;
|
||||||
|
force_default_wallpaper = 0;
|
||||||
|
};
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
preserve_split = true;
|
||||||
|
force_split = 2;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,6 @@
|
|||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
programs.hyprland.enable = true;
|
programs.hyprland.enable = true;
|
||||||
services.greetd = {
|
|
||||||
enable = true;
|
|
||||||
settings.default_session = {
|
|
||||||
command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd Hyprland";
|
|
||||||
user = "greeter";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
users.users.jawz.packages = builtins.attrValues {
|
users.users.jawz.packages = builtins.attrValues {
|
||||||
inherit (pkgs)
|
inherit (pkgs)
|
||||||
wl-clipboard-rs
|
wl-clipboard-rs
|
||||||
@@ -25,4 +18,11 @@
|
|||||||
;
|
;
|
||||||
};
|
};
|
||||||
home-manager.users.jawz.imports = [ ./hyprland-home.nix ];
|
home-manager.users.jawz.imports = [ ./hyprland-home.nix ];
|
||||||
|
services.greetd = {
|
||||||
|
enable = true;
|
||||||
|
settings.default_session = {
|
||||||
|
command = "${pkgs.tuigreet}/bin/tuigreet --time --cmd Hyprland";
|
||||||
|
user = "greeter";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
90
flake.lock
generated
90
flake.lock
generated
@@ -20,11 +20,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773436376,
|
"lastModified": 1774211390,
|
||||||
"narHash": "sha256-OUPRrprbgN27BXHuWkMAPSCfLLQ/uwpWghEfKYN2iAg=",
|
"narHash": "sha256-sTtAgCCaX8VNNZlQFACd3i1IQ+DB0Wf3COgiFS152ds=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "aquamarine",
|
"repo": "aquamarine",
|
||||||
"rev": "43f10d24391692bba3d762931ee35e7f17f8e8b8",
|
"rev": "f62a4dbfa4e5584f14ad4c62afedf6e4b433cf70",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -420,11 +420,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772893680,
|
"lastModified": 1774104215,
|
||||||
"narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=",
|
"narHash": "sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "8baab586afc9c9b57645a734c820e4ac0a604af9",
|
"rev": "f799ae951fde0627157f40aec28dec27b22076d0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -503,11 +503,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773963144,
|
"lastModified": 1774274588,
|
||||||
"narHash": "sha256-WzBOBfSay3GYilUfKaUa1Mbf8/jtuAiJIedx7fWuIX4=",
|
"narHash": "sha256-dnHvv5EMUgTzGZmA+3diYjQU2O6BEpGLEOgJ1Qe9LaY=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "a91b3ea73a765614d90360580b689c48102d1d33",
|
"rev": "cf9686ba26f5ef788226843bc31fda4cf72e373b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -594,11 +594,11 @@
|
|||||||
"xdph": "xdph"
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774029157,
|
"lastModified": 1774270522,
|
||||||
"narHash": "sha256-OGtXRftdimLDExxD7MGmg1IGY0b3Pmqdm61fbZkt6dk=",
|
"narHash": "sha256-v3+29zRU210u9LB4eDc4iLE9+jN4xsRgmZKyOjufoaw=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "Hyprland",
|
"repo": "Hyprland",
|
||||||
"rev": "8726a7363eb9213235e6e23657668e0daac39a5b",
|
"rev": "64a2e4e26388f017fd9198a6d70424f1f251a5a0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -771,11 +771,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773948364,
|
"lastModified": 1774211405,
|
||||||
"narHash": "sha256-S76omfIVQ1TpGiXFbqih6o6XcH3sA5+5QI+SXB4HvlY=",
|
"narHash": "sha256-6KNwP4ojUzv3YBlZU5BqCpTrWHcix1Jo01BISsTT0xk=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "hyprutils",
|
"repo": "hyprutils",
|
||||||
"rev": "b85b779e3e3a1adcd9b098e3447cf48f9e780b35",
|
"rev": "cb4e152dc72095a2af422956c6b689590572231a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -888,11 +888,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774013813,
|
"lastModified": 1774233978,
|
||||||
"narHash": "sha256-gaKNu+dW6lA4LU8PM4pNqmaqoY8hIggM7ticP6VjVFk=",
|
"narHash": "sha256-rT9wnIfbI1gjl0gq4nN8/5ZvFWn+K6QLwlyy6Gx8FDc=",
|
||||||
"owner": "fufexan",
|
"owner": "fufexan",
|
||||||
"repo": "nix-gaming",
|
"repo": "nix-gaming",
|
||||||
"rev": "342bd5c65526d57b7bed200c8219d1a48414c806",
|
"rev": "4a583dd427ccf7d912282909a2702a6a547d8560",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -967,11 +967,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-small": {
|
"nixpkgs-small": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773996037,
|
"lastModified": 1774244481,
|
||||||
"narHash": "sha256-GzJ5WVh+cK4dNCD6dHvLWgUag0K0a/1ndIvi5rBMXgo=",
|
"narHash": "sha256-4XfMXU0DjN83o6HWZoKG9PegCvKvIhNUnRUI19vzTcQ=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "04c412cbb2d7729f958be27ba86298bf9e9da9d6",
|
"rev": "4590696c8693fea477850fe379a01544293ca4e2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -983,11 +983,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773821835,
|
"lastModified": 1774106199,
|
||||||
"narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=",
|
"narHash": "sha256-US5Tda2sKmjrg2lNHQL3jRQ6p96cgfWh3J1QBliQ8Ws=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0",
|
"rev": "6c9a78c09ff4d6c21d0319114873508a6ec01655",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -999,11 +999,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773814637,
|
"lastModified": 1774244481,
|
||||||
"narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=",
|
"narHash": "sha256-4XfMXU0DjN83o6HWZoKG9PegCvKvIhNUnRUI19vzTcQ=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96",
|
"rev": "4590696c8693fea477850fe379a01544293ca4e2",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1042,11 +1042,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774043868,
|
"lastModified": 1774302711,
|
||||||
"narHash": "sha256-enrOdHXWwAiHxr8XQ85DsbxQys99F7AHe43uQeREMQw=",
|
"narHash": "sha256-TmcR/PV0pf2vrAC7JtmINZTAEG6PpCs2vOIp5FQEEY0=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nur",
|
"repo": "nur",
|
||||||
"rev": "94f53d62e97c801214d26bda793410260f8d34b3",
|
"rev": "7a80aff234248c25617f875d0a3e64f39080e536",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1090,11 +1090,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772893680,
|
"lastModified": 1774104215,
|
||||||
"narHash": "sha256-JDqZMgxUTCq85ObSaFw0HhE+lvdOre1lx9iI6vYyOEs=",
|
"narHash": "sha256-EAtviqz0sEAxdHS4crqu7JGR5oI3BwaqG0mw7CmXkO8=",
|
||||||
"owner": "cachix",
|
"owner": "cachix",
|
||||||
"repo": "git-hooks.nix",
|
"repo": "git-hooks.nix",
|
||||||
"rev": "8baab586afc9c9b57645a734c820e4ac0a604af9",
|
"rev": "f799ae951fde0627157f40aec28dec27b22076d0",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1127,11 +1127,11 @@
|
|||||||
"qbit_manage": {
|
"qbit_manage": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1764428351,
|
"lastModified": 1774123356,
|
||||||
"narHash": "sha256-JCsbf2mPRhs7Mbekl946G/y/CSNSSvQBLvlwVy/Avcg=",
|
"narHash": "sha256-7B2JZNK8ESbfNLCVUL40Rldj67LCdDHOa+BkL7xmOcY=",
|
||||||
"owner": "StuffAnThings",
|
"owner": "StuffAnThings",
|
||||||
"repo": "qbit_manage",
|
"repo": "qbit_manage",
|
||||||
"rev": "371627bbeb082e68f057bbe4599565c2e63a14c7",
|
"rev": "b2b035b7c06d7e81ecbd322c9c2ea18986718ae3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1172,11 +1172,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773889674,
|
"lastModified": 1774303811,
|
||||||
"narHash": "sha256-+ycaiVAk3MEshJTg35cBTUa0MizGiS+bgpYw/f8ohkg=",
|
"narHash": "sha256-fhG4JAcLgjKwt+XHbjs8brpWnyKUfU4LikLm3s0Q/ic=",
|
||||||
"owner": "Mic92",
|
"owner": "Mic92",
|
||||||
"repo": "sops-nix",
|
"repo": "sops-nix",
|
||||||
"rev": "29b6519f3e0780452bca0ac0be4584f04ac16cc5",
|
"rev": "614e256310e0a4f8a9ccae3fa80c11844fba7042",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1206,11 +1206,11 @@
|
|||||||
"tinted-zed": "tinted-zed"
|
"tinted-zed": "tinted-zed"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1773790548,
|
"lastModified": 1774194089,
|
||||||
"narHash": "sha256-6lI+ZM1yWL4cNRT39s8AUC+kwq237PZCrWc1ubLOwqc=",
|
"narHash": "sha256-SCczWhr8y8aaXVHG+gOGcRahNb0BU1Z5zYZuv9W/nA8=",
|
||||||
"owner": "danth",
|
"owner": "danth",
|
||||||
"repo": "stylix",
|
"repo": "stylix",
|
||||||
"rev": "e8ffdddd42062ebc90178db9d013aa38c20b7b2f",
|
"rev": "7c34241d80ea64dd2039bb3a786fb66b4c6261d9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -1472,11 +1472,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1772669058,
|
"lastModified": 1773601989,
|
||||||
"narHash": "sha256-XhnY0aRuDo5LT8pmJVPofPOgO2hAR7T+XRoaQxtNPzQ=",
|
"narHash": "sha256-2tJf/CQoHApoIudxHeJye+0Ii7scR0Yyi7pNiWk0Hn8=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "xdg-desktop-portal-hyprland",
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
"rev": "906d0ac159803a7df2dc1f948df9327670380f69",
|
"rev": "a9b862d1aa000a676d310cc62d249f7ad726233d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
20
flake.nix
20
flake.nix
@@ -1,5 +1,15 @@
|
|||||||
{
|
{
|
||||||
description = "JawZ NixOS flake setup";
|
description = "JawZ NixOS flake setup";
|
||||||
|
outputs =
|
||||||
|
inputs:
|
||||||
|
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
|
||||||
|
imports = [
|
||||||
|
./parts/core.nix
|
||||||
|
./parts/hosts.nix
|
||||||
|
./parts/packages.nix
|
||||||
|
./parts/devshells.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
inputs = {
|
inputs = {
|
||||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.11";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.11";
|
||||||
@@ -71,14 +81,4 @@
|
|||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
outputs =
|
|
||||||
inputs:
|
|
||||||
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
|
|
||||||
imports = [
|
|
||||||
./parts/core.nix
|
|
||||||
./parts/hosts.nix
|
|
||||||
./parts/packages.nix
|
|
||||||
./parts/devshells.nix
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
../../config/stylix.nix
|
../../config/stylix.nix
|
||||||
../../environments/hyprland.nix
|
../../environments/hyprland.nix
|
||||||
];
|
];
|
||||||
|
networking.hostName = "emacs";
|
||||||
|
environment.systemPackages = [ ];
|
||||||
virtualisation.vmVariant.virtualisation = {
|
virtualisation.vmVariant.virtualisation = {
|
||||||
memorySize = 4096;
|
memorySize = 4096;
|
||||||
cores = 4;
|
cores = 4;
|
||||||
@@ -23,6 +25,11 @@
|
|||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
shell.tools.enable = true;
|
shell.tools.enable = true;
|
||||||
services.network.enable = true;
|
services.network.enable = true;
|
||||||
|
interfaces = lib.mkMerge [
|
||||||
|
{
|
||||||
|
emacs = "eth0";
|
||||||
|
}
|
||||||
|
];
|
||||||
dev = {
|
dev = {
|
||||||
nix.enable = true;
|
nix.enable = true;
|
||||||
python.enable = true;
|
python.enable = true;
|
||||||
@@ -37,12 +44,5 @@
|
|||||||
zig.enable = true;
|
zig.enable = true;
|
||||||
docker.enable = true;
|
docker.enable = true;
|
||||||
};
|
};
|
||||||
interfaces = lib.mkMerge [
|
|
||||||
{
|
|
||||||
emacs = "eth0";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
networking.hostName = "emacs";
|
|
||||||
environment.systemPackages = [ ];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
my = import ./toggles.nix { inherit inputs; };
|
||||||
home = {
|
home = {
|
||||||
username = "carlosdaniloreyesmartinez";
|
username = "carlosdaniloreyesmartinez";
|
||||||
homeDirectory = "/Users/carlosdaniloreyesmartinez";
|
homeDirectory = "/Users/carlosdaniloreyesmartinez";
|
||||||
@@ -13,10 +14,11 @@
|
|||||||
starship.enable = true;
|
starship.enable = true;
|
||||||
kitty = {
|
kitty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
shellIntegration.enableBashIntegration = false;
|
|
||||||
shellIntegration.enableZshIntegration = true;
|
|
||||||
settings.term = "xterm-256color";
|
settings.term = "xterm-256color";
|
||||||
|
shellIntegration = {
|
||||||
|
enableBashIntegration = false;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
my = import ./toggles.nix { inherit inputs; };
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,14 +6,18 @@
|
|||||||
../../config/stylix.nix
|
../../config/stylix.nix
|
||||||
];
|
];
|
||||||
my = import ./toggles.nix { inherit inputs; } // {
|
my = import ./toggles.nix { inherit inputs; } // {
|
||||||
nix.cores = 3;
|
nix = {
|
||||||
nix.maxJobs = 8;
|
cores = 3;
|
||||||
users.nixremote.enable = true;
|
maxJobs = 8;
|
||||||
users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
|
};
|
||||||
|
users.nixremote = {
|
||||||
|
enable = true;
|
||||||
|
authorizedKeys = inputs.self.lib.getSshKeys [
|
||||||
"nixworkstation"
|
"nixworkstation"
|
||||||
"nixserver"
|
"nixserver"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
};
|
||||||
nix.buildMachines =
|
nix.buildMachines =
|
||||||
let
|
let
|
||||||
buildMachine = hostName: maxJobs: speedFactor: {
|
buildMachine = hostName: maxJobs: speedFactor: {
|
||||||
@@ -27,6 +31,7 @@
|
|||||||
(buildMachine "workstation" 8 40)
|
(buildMachine "workstation" 8 40)
|
||||||
(buildMachine "server" 6 17)
|
(buildMachine "server" 6 17)
|
||||||
];
|
];
|
||||||
|
nixpkgs.config.permittedInsecurePackages = [ "openssl-1.1.1w" ];
|
||||||
networking = {
|
networking = {
|
||||||
hostName = "miniserver";
|
hostName = "miniserver";
|
||||||
firewall = {
|
firewall = {
|
||||||
@@ -34,7 +39,6 @@
|
|||||||
allowedUDPPorts = [ 2049 ];
|
allowedUDPPorts = [ 2049 ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
nixpkgs.config.permittedInsecurePackages = [ "openssl-1.1.1w" ];
|
|
||||||
services = {
|
services = {
|
||||||
btrfs.autoScrub = {
|
btrfs.autoScrub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -54,19 +54,17 @@
|
|||||||
fileSystems =
|
fileSystems =
|
||||||
let
|
let
|
||||||
nfsMount = server: nfsDisk: {
|
nfsMount = server: nfsDisk: {
|
||||||
device = "${server}:/${nfsDisk}";
|
|
||||||
fsType = "nfs";
|
|
||||||
options = [
|
options = [
|
||||||
"x-systemd.automount"
|
"x-systemd.automount"
|
||||||
"noauto"
|
"noauto"
|
||||||
"x-systemd.idle-timeout=600"
|
"x-systemd.idle-timeout=600"
|
||||||
];
|
];
|
||||||
|
device = "${server}:/${nfsDisk}";
|
||||||
|
fsType = "nfs";
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
"/" = {
|
"/" = {
|
||||||
device = "/dev/mapper/nvme";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [
|
options = [
|
||||||
"subvol=nix"
|
"subvol=nix"
|
||||||
"ssd"
|
"ssd"
|
||||||
@@ -77,10 +75,10 @@
|
|||||||
"datacow"
|
"datacow"
|
||||||
"noatime"
|
"noatime"
|
||||||
];
|
];
|
||||||
};
|
|
||||||
"/home" = {
|
|
||||||
device = "/dev/mapper/nvme";
|
device = "/dev/mapper/nvme";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
|
};
|
||||||
|
"/home" = {
|
||||||
options = [
|
options = [
|
||||||
"subvol=home"
|
"subvol=home"
|
||||||
"ssd"
|
"ssd"
|
||||||
@@ -90,6 +88,8 @@
|
|||||||
"commit=120"
|
"commit=120"
|
||||||
"datacow"
|
"datacow"
|
||||||
];
|
];
|
||||||
|
device = "/dev/mapper/nvme";
|
||||||
|
fsType = "btrfs";
|
||||||
};
|
};
|
||||||
"/boot" = {
|
"/boot" = {
|
||||||
device = "/dev/disk/by-uuid/bf0aeb95-94cc-4377-b6e4-1dbb4958b334";
|
device = "/dev/disk/by-uuid/bf0aeb95-94cc-4377-b6e4-1dbb4958b334";
|
||||||
@@ -100,18 +100,18 @@
|
|||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
"/var/lib/nextcloud/data" = {
|
"/var/lib/nextcloud/data" = {
|
||||||
device = "/srv/pool/nextcloud";
|
|
||||||
options = [ "bind" ];
|
options = [ "bind" ];
|
||||||
|
device = "/srv/pool/nextcloud";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
"/export/pool" = {
|
"/export/pool" = {
|
||||||
device = "/srv/pool";
|
|
||||||
options = [ "bind" ];
|
options = [ "bind" ];
|
||||||
|
device = "/srv/pool";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
"/export/jawz" = {
|
"/export/jawz" = {
|
||||||
device = "/home/jawz";
|
|
||||||
options = [ "bind" ];
|
options = [ "bind" ];
|
||||||
|
device = "/home/jawz";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
"/srv/server/pool" = nfsMount "server" "pool" // { };
|
"/srv/server/pool" = nfsMount "server" "pool" // { };
|
||||||
|
|||||||
@@ -8,14 +8,6 @@ let
|
|||||||
;
|
;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
emacs = {
|
|
||||||
enable = true;
|
|
||||||
users = "jawz";
|
|
||||||
};
|
|
||||||
stylix = {
|
|
||||||
enable = true;
|
|
||||||
users = "jawz";
|
|
||||||
};
|
|
||||||
enableProxy = true;
|
enableProxy = true;
|
||||||
websites.portfolio.enableProxy = true;
|
websites.portfolio.enableProxy = true;
|
||||||
apps = enableList mkEnabledWithUsers [
|
apps = enableList mkEnabledWithUsers [
|
||||||
@@ -49,4 +41,12 @@ in
|
|||||||
// enableList mkEnabledWithProxy [
|
// enableList mkEnabledWithProxy [
|
||||||
"audiobookshelf"
|
"audiobookshelf"
|
||||||
];
|
];
|
||||||
|
emacs = {
|
||||||
|
enable = true;
|
||||||
|
users = "jawz";
|
||||||
|
};
|
||||||
|
stylix = {
|
||||||
|
enable = true;
|
||||||
|
users = "jawz";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,13 +17,16 @@ in
|
|||||||
];
|
];
|
||||||
my = import ./toggles.nix { inherit config inputs; } // {
|
my = import ./toggles.nix { inherit config inputs; } // {
|
||||||
nix.cores = 6;
|
nix.cores = 6;
|
||||||
users.nixremote.enable = true;
|
users.nixremote = {
|
||||||
users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
|
enable = true;
|
||||||
|
authorizedKeys = inputs.self.lib.getSshKeys [
|
||||||
"nixworkstation"
|
"nixworkstation"
|
||||||
"nixminiserver"
|
"nixminiserver"
|
||||||
];
|
];
|
||||||
network.firewall.enabledServicePorts = true;
|
};
|
||||||
network.firewall.additionalPorts = [
|
network.firewall = {
|
||||||
|
enabledServicePorts = true;
|
||||||
|
additionalPorts = [
|
||||||
2049 # idk
|
2049 # idk
|
||||||
config.my.ports.syncthingGui
|
config.my.ports.syncthingGui
|
||||||
config.my.ports.syncthingRelay
|
config.my.ports.syncthingRelay
|
||||||
@@ -34,6 +37,7 @@ in
|
|||||||
config.my.ports.qbittorrent
|
config.my.ports.qbittorrent
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
};
|
||||||
nix.buildMachines = [
|
nix.buildMachines = [
|
||||||
{
|
{
|
||||||
hostName = "workstation";
|
hostName = "workstation";
|
||||||
@@ -65,10 +69,6 @@ in
|
|||||||
};
|
};
|
||||||
networking = {
|
networking = {
|
||||||
hostName = "server";
|
hostName = "server";
|
||||||
firewall = {
|
|
||||||
allowedUDPPorts = config.networking.firewall.allowedTCPPorts;
|
|
||||||
interfaces.wg0.allowedTCPPorts = [ config.my.servers.nextcloud.port ];
|
|
||||||
};
|
|
||||||
wireguard.interfaces.wg0 = lib.mkIf config.my.secureHost {
|
wireguard.interfaces.wg0 = lib.mkIf config.my.secureHost {
|
||||||
ips = [ "${config.my.ips.wg-server}/32" ];
|
ips = [ "${config.my.ips.wg-server}/32" ];
|
||||||
privateKeyFile = config.sops.secrets."server/private".path;
|
privateKeyFile = config.sops.secrets."server/private".path;
|
||||||
@@ -86,6 +86,10 @@ in
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
firewall = {
|
||||||
|
allowedUDPPorts = config.networking.firewall.allowedTCPPorts;
|
||||||
|
interfaces.wg0.allowedTCPPorts = [ config.my.servers.nextcloud.port ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
users.users.jawz.packages = builtins.attrValues {
|
users.users.jawz.packages = builtins.attrValues {
|
||||||
inherit (pkgs) podman-compose attic-client;
|
inherit (pkgs) podman-compose attic-client;
|
||||||
@@ -116,8 +120,7 @@ in
|
|||||||
vpsHost = "lidarr-reports@${config.my.ips.vps}";
|
vpsHost = "lidarr-reports@${config.my.ips.vps}";
|
||||||
vpsPath = "/var/www/html/lidarr-mb-gap";
|
vpsPath = "/var/www/html/lidarr-mb-gap";
|
||||||
sshKeyFile = config.sops.secrets."private_keys/lidarr-mb-gap".path;
|
sshKeyFile = config.sops.secrets."private_keys/lidarr-mb-gap".path;
|
||||||
sshKnownHosts = {
|
sshKnownHosts.vps = {
|
||||||
vps = {
|
|
||||||
hostNames = [
|
hostNames = [
|
||||||
config.my.ips.vps
|
config.my.ips.vps
|
||||||
"[${config.my.ips.vps}]:3456"
|
"[${config.my.ips.vps}]:3456"
|
||||||
@@ -126,5 +129,4 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,8 +84,6 @@ in
|
|||||||
};
|
};
|
||||||
fileSystems = {
|
fileSystems = {
|
||||||
"/" = {
|
"/" = {
|
||||||
device = "/dev/mapper/nvme";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [
|
options = [
|
||||||
"subvol=nix"
|
"subvol=nix"
|
||||||
"ssd"
|
"ssd"
|
||||||
@@ -96,10 +94,10 @@ in
|
|||||||
"datacow"
|
"datacow"
|
||||||
"noatime"
|
"noatime"
|
||||||
];
|
];
|
||||||
};
|
|
||||||
"/home" = {
|
|
||||||
device = "/dev/mapper/nvme";
|
device = "/dev/mapper/nvme";
|
||||||
fsType = "btrfs";
|
fsType = "btrfs";
|
||||||
|
};
|
||||||
|
"/home" = {
|
||||||
options = [
|
options = [
|
||||||
"subvol=home"
|
"subvol=home"
|
||||||
"ssd"
|
"ssd"
|
||||||
@@ -109,19 +107,19 @@ in
|
|||||||
"commit=120"
|
"commit=120"
|
||||||
"datacow"
|
"datacow"
|
||||||
];
|
];
|
||||||
|
device = "/dev/mapper/nvme";
|
||||||
|
fsType = "btrfs";
|
||||||
};
|
};
|
||||||
"/boot" = {
|
"/boot" = {
|
||||||
|
options = [ "nofail" ];
|
||||||
device = "/dev/disk/by-uuid/c574cb53-dc40-46db-beff-0fe8a4787156";
|
device = "/dev/disk/by-uuid/c574cb53-dc40-46db-beff-0fe8a4787156";
|
||||||
fsType = "ext4";
|
fsType = "ext4";
|
||||||
options = [ "nofail" ];
|
|
||||||
};
|
};
|
||||||
"/boot/efi" = {
|
"/boot/efi" = {
|
||||||
device = "/dev/disk/by-uuid/CBE7-5DEB";
|
device = "/dev/disk/by-uuid/CBE7-5DEB";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
"/srv/pool" = {
|
"/srv/pool" = {
|
||||||
device = "/dev/disk/by-uuid/1e7cf787-e34d-4e3e-ac3c-0c07309dbd34";
|
|
||||||
fsType = "btrfs";
|
|
||||||
options = [
|
options = [
|
||||||
"subvol=@data"
|
"subvol=@data"
|
||||||
"compress=zstd:3"
|
"compress=zstd:3"
|
||||||
@@ -129,34 +127,36 @@ in
|
|||||||
"commit=120"
|
"commit=120"
|
||||||
"datacow"
|
"datacow"
|
||||||
];
|
];
|
||||||
|
device = "/dev/disk/by-uuid/1e7cf787-e34d-4e3e-ac3c-0c07309dbd34";
|
||||||
|
fsType = "btrfs";
|
||||||
depends = [ "/boot/efi" ];
|
depends = [ "/boot/efi" ];
|
||||||
};
|
};
|
||||||
"/var/lib/nextcloud/data" = {
|
"/var/lib/nextcloud/data" = {
|
||||||
device = "/srv/pool/nextcloud";
|
|
||||||
options = [ "bind" ];
|
options = [ "bind" ];
|
||||||
|
device = "/srv/pool/nextcloud";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
"/srv/jellyfin/media" = {
|
"/srv/jellyfin/media" = {
|
||||||
device = "/srv/pool/multimedia/media";
|
|
||||||
options = [
|
options = [
|
||||||
"bind"
|
"bind"
|
||||||
"ro"
|
"ro"
|
||||||
];
|
];
|
||||||
|
device = "/srv/pool/multimedia/media";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
"/export/pool" = {
|
"/export/pool" = {
|
||||||
device = "/srv/pool";
|
|
||||||
options = [ "bind" ];
|
options = [ "bind" ];
|
||||||
|
device = "/srv/pool";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
"/export/jawz" = {
|
"/export/jawz" = {
|
||||||
device = "/home/jawz";
|
|
||||||
options = [ "bind" ];
|
options = [ "bind" ];
|
||||||
|
device = "/home/jawz";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
"/export/backups" = {
|
"/export/backups" = {
|
||||||
device = "/srv/backups";
|
|
||||||
options = [ "bind" ];
|
options = [ "bind" ];
|
||||||
|
device = "/srv/backups";
|
||||||
depends = [ "/srv/pool" ];
|
depends = [ "/srv/pool" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,20 +4,8 @@ let
|
|||||||
mkEnabledIp = inputs.self.lib.mkEnabledIp config.my.ips.wg-server;
|
mkEnabledIp = inputs.self.lib.mkEnabledIp config.my.ips.wg-server;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
emacs = {
|
|
||||||
enable = true;
|
|
||||||
users = "jawz";
|
|
||||||
};
|
|
||||||
stylix = {
|
|
||||||
enable = true;
|
|
||||||
users = "jawz";
|
|
||||||
};
|
|
||||||
enableProxy = true;
|
enableProxy = true;
|
||||||
enableContainers = true;
|
enableContainers = true;
|
||||||
apps.dictionaries = {
|
|
||||||
enable = true;
|
|
||||||
users = "jawz";
|
|
||||||
};
|
|
||||||
shell = enableList mkEnabledWithUsers [
|
shell = enableList mkEnabledWithUsers [
|
||||||
"multimedia"
|
"multimedia"
|
||||||
"tools"
|
"tools"
|
||||||
@@ -93,4 +81,16 @@ in
|
|||||||
"plausible"
|
"plausible"
|
||||||
"vaultwarden"
|
"vaultwarden"
|
||||||
];
|
];
|
||||||
|
emacs = {
|
||||||
|
enable = true;
|
||||||
|
users = "jawz";
|
||||||
|
};
|
||||||
|
stylix = {
|
||||||
|
enable = true;
|
||||||
|
users = "jawz";
|
||||||
|
};
|
||||||
|
apps.dictionaries = {
|
||||||
|
enable = true;
|
||||||
|
users = "jawz";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,13 +70,30 @@ in
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
image.modules.linode = { };
|
||||||
|
environment.systemPackages = [ ];
|
||||||
|
security.sudo-rs.extraRules = [
|
||||||
|
{
|
||||||
|
users = [ "nixremote" ];
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
options = [ "NOPASSWD" ];
|
||||||
|
command = "/run/current-system/sw/bin/nixos-rebuild";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /var/www/html 2775 deploy www-data -"
|
||||||
|
"d /var/www/html/portfolio 2775 deploy www-data -"
|
||||||
|
"d /var/www/html/blog 2775 deploy www-data -"
|
||||||
|
"d /var/www/html/lidarr-mb-gap 2775 lidarr-reports lidarr-reports -"
|
||||||
|
];
|
||||||
sops.age = {
|
sops.age = {
|
||||||
generateKey = true;
|
generateKey = true;
|
||||||
keyFile = "/var/lib/sops-nix/key.txt";
|
keyFile = "/var/lib/sops-nix/key.txt";
|
||||||
sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
||||||
};
|
};
|
||||||
image.modules.linode = { };
|
|
||||||
environment.systemPackages = [ ];
|
|
||||||
networking = {
|
networking = {
|
||||||
hostName = "vps";
|
hostName = "vps";
|
||||||
nat = {
|
nat = {
|
||||||
@@ -137,23 +154,6 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
security.sudo-rs.extraRules = [
|
|
||||||
{
|
|
||||||
users = [ "nixremote" ];
|
|
||||||
commands = [
|
|
||||||
{
|
|
||||||
command = "/run/current-system/sw/bin/nixos-rebuild";
|
|
||||||
options = [ "NOPASSWD" ];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
systemd.tmpfiles.rules = [
|
|
||||||
"d /var/www/html 2775 deploy www-data -"
|
|
||||||
"d /var/www/html/portfolio 2775 deploy www-data -"
|
|
||||||
"d /var/www/html/blog 2775 deploy www-data -"
|
|
||||||
"d /var/www/html/lidarr-mb-gap 2775 lidarr-reports lidarr-reports -"
|
|
||||||
];
|
|
||||||
services = {
|
services = {
|
||||||
smartd.enable = lib.mkForce false;
|
smartd.enable = lib.mkForce false;
|
||||||
openssh.ports = [ ports.ssh ];
|
openssh.ports = [ ports.ssh ];
|
||||||
|
|||||||
@@ -41,10 +41,6 @@ let
|
|||||||
secureToggles = {
|
secureToggles = {
|
||||||
enableProxy = true;
|
enableProxy = true;
|
||||||
enableContainers = true;
|
enableContainers = true;
|
||||||
websites = {
|
|
||||||
portfolio.enableProxy = true;
|
|
||||||
lidarrMbReport.enableProxy = true;
|
|
||||||
};
|
|
||||||
servers =
|
servers =
|
||||||
enableList mkEnabledWithProxy [
|
enableList mkEnabledWithProxy [
|
||||||
"isso"
|
"isso"
|
||||||
@@ -78,6 +74,10 @@ let
|
|||||||
"vaultwarden"
|
"vaultwarden"
|
||||||
"yamtrack"
|
"yamtrack"
|
||||||
];
|
];
|
||||||
|
websites = {
|
||||||
|
portfolio.enableProxy = true;
|
||||||
|
lidarrMbReport.enableProxy = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
lib.mkMerge [
|
lib.mkMerge [
|
||||||
|
|||||||
@@ -25,14 +25,18 @@ in
|
|||||||
../../environments/gnome.nix
|
../../environments/gnome.nix
|
||||||
];
|
];
|
||||||
my = import ./toggles.nix { inherit inputs; } // {
|
my = import ./toggles.nix { inherit inputs; } // {
|
||||||
nix.cores = 8;
|
nix = {
|
||||||
nix.maxJobs = 8;
|
cores = 8;
|
||||||
users.nixremote.enable = true;
|
maxJobs = 8;
|
||||||
users.nixremote.authorizedKeys = inputs.self.lib.getSshKeys [
|
};
|
||||||
|
users.nixremote = {
|
||||||
|
enable = true;
|
||||||
|
authorizedKeys = inputs.self.lib.getSshKeys [
|
||||||
"nixserver"
|
"nixserver"
|
||||||
"nixminiserver"
|
"nixminiserver"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
};
|
||||||
sops.secrets."workstation/private" = lib.mkIf config.my.secureHost {
|
sops.secrets."workstation/private" = lib.mkIf config.my.secureHost {
|
||||||
sopsFile = ../../secrets/wireguard.yaml;
|
sopsFile = ../../secrets/wireguard.yaml;
|
||||||
};
|
};
|
||||||
@@ -53,6 +57,21 @@ in
|
|||||||
};
|
};
|
||||||
networking = {
|
networking = {
|
||||||
hostName = "workstation";
|
hostName = "workstation";
|
||||||
|
wireguard.interfaces.wg0 = lib.mkIf config.my.secureHost {
|
||||||
|
ips = [ "${config.my.ips.wg-workstation}/32" ];
|
||||||
|
privateKeyFile = config.sops.secrets."workstation/private".path;
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "dFbiSekBwnZomarcS31o5+w6imHjMPNCipkfc2fZ3GY=";
|
||||||
|
endpoint = "${config.my.ips.vps}:51820";
|
||||||
|
persistentKeepalive = 25;
|
||||||
|
allowedIPs = [
|
||||||
|
"${config.my.ips.wg-vps}/32"
|
||||||
|
config.my.subnets.wg-homelab
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
firewall = {
|
firewall = {
|
||||||
allowedTCPPorts = [
|
allowedTCPPorts = [
|
||||||
config.my.ports.nsUsbloader
|
config.my.ports.nsUsbloader
|
||||||
@@ -80,21 +99,6 @@ in
|
|||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
wireguard.interfaces.wg0 = lib.mkIf config.my.secureHost {
|
|
||||||
ips = [ "${config.my.ips.wg-workstation}/32" ];
|
|
||||||
privateKeyFile = config.sops.secrets."workstation/private".path;
|
|
||||||
peers = [
|
|
||||||
{
|
|
||||||
publicKey = "dFbiSekBwnZomarcS31o5+w6imHjMPNCipkfc2fZ3GY=";
|
|
||||||
endpoint = "${config.my.ips.vps}:51820";
|
|
||||||
persistentKeepalive = 25;
|
|
||||||
allowedIPs = [
|
|
||||||
"${config.my.ips.wg-vps}/32"
|
|
||||||
config.my.subnets.wg-homelab
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
users = {
|
users = {
|
||||||
groups.ai = { };
|
groups.ai = { };
|
||||||
|
|||||||
@@ -87,17 +87,16 @@ in
|
|||||||
fileSystems =
|
fileSystems =
|
||||||
let
|
let
|
||||||
nfsMount = server: nfsDisk: {
|
nfsMount = server: nfsDisk: {
|
||||||
device = "${server}:/${nfsDisk}";
|
|
||||||
fsType = "nfs";
|
|
||||||
options = [
|
options = [
|
||||||
"x-systemd.automount"
|
"x-systemd.automount"
|
||||||
"noauto"
|
"noauto"
|
||||||
"x-systemd.idle-timeout=600"
|
"x-systemd.idle-timeout=600"
|
||||||
];
|
];
|
||||||
|
device = "${server}:/${nfsDisk}";
|
||||||
|
fsType = "nfs";
|
||||||
};
|
};
|
||||||
btrfsMount = device: subvol: extraOpts: {
|
btrfsMount = device: subvol: extraOpts: {
|
||||||
inherit device;
|
inherit device;
|
||||||
fsType = "btrfs";
|
|
||||||
options = extraOpts ++ [
|
options = extraOpts ++ [
|
||||||
"subvol=${subvol}"
|
"subvol=${subvol}"
|
||||||
"ssd"
|
"ssd"
|
||||||
@@ -107,6 +106,7 @@ in
|
|||||||
"commit=120"
|
"commit=120"
|
||||||
"datacow"
|
"datacow"
|
||||||
];
|
];
|
||||||
|
fsType = "btrfs";
|
||||||
};
|
};
|
||||||
trashOptions = [
|
trashOptions = [
|
||||||
"x-gvfs-trash"
|
"x-gvfs-trash"
|
||||||
|
|||||||
@@ -3,14 +3,6 @@ let
|
|||||||
inherit (inputs.self.lib) mkEnabled mkEnabledWithUsers enableList;
|
inherit (inputs.self.lib) mkEnabled mkEnabledWithUsers enableList;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
stylix = {
|
|
||||||
enable = true;
|
|
||||||
users = "jawz";
|
|
||||||
};
|
|
||||||
emacs = {
|
|
||||||
enable = true;
|
|
||||||
users = "jawz";
|
|
||||||
};
|
|
||||||
enableContainers = true;
|
enableContainers = true;
|
||||||
servers.drpp.enable = true;
|
servers.drpp.enable = true;
|
||||||
apps =
|
apps =
|
||||||
@@ -52,4 +44,12 @@ in
|
|||||||
"ffmpeg4discord"
|
"ffmpeg4discord"
|
||||||
"update-org-agenda-cache"
|
"update-org-agenda-cache"
|
||||||
];
|
];
|
||||||
|
stylix = {
|
||||||
|
enable = true;
|
||||||
|
users = "jawz";
|
||||||
|
};
|
||||||
|
emacs = {
|
||||||
|
enable = true;
|
||||||
|
users = "jawz";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.my = {
|
options.my = {
|
||||||
|
dev.gameDev.enable = lib.mkEnableOption "game development tools and engines";
|
||||||
apps.art = {
|
apps.art = {
|
||||||
enable = lib.mkEnableOption "digital art and creative applications";
|
enable = lib.mkEnableOption "digital art and creative applications";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -45,7 +46,6 @@ in
|
|||||||
description = "Users to install art packages for";
|
description = "Users to install art packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
dev.gameDev.enable = lib.mkEnableOption "game development tools and engines";
|
|
||||||
};
|
};
|
||||||
config.users.users =
|
config.users.users =
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ let
|
|||||||
);
|
);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ inputs.nix-gaming.nixosModules.platformOptimizations ];
|
|
||||||
options.my.apps = {
|
options.my.apps = {
|
||||||
|
switch.enable = lib.mkEnableOption "Nintendo Switch homebrew tools";
|
||||||
gaming = {
|
gaming = {
|
||||||
enable = lib.mkEnableOption "gaming applications and emulators";
|
enable = lib.mkEnableOption "gaming applications and emulators";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -31,8 +31,8 @@ in
|
|||||||
description = "Users to install gaming packages for";
|
description = "Users to install gaming packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
switch.enable = lib.mkEnableOption "Nintendo Switch homebrew tools";
|
|
||||||
};
|
};
|
||||||
|
imports = [ inputs.nix-gaming.nixosModules.platformOptimizations ];
|
||||||
config = lib.mkIf config.my.apps.gaming.enable {
|
config = lib.mkIf config.my.apps.gaming.enable {
|
||||||
# sops.secrets.switch-presence = lib.mkIf config.my.apps.gaming.switch.enable {
|
# sops.secrets.switch-presence = lib.mkIf config.my.apps.gaming.switch.enable {
|
||||||
# sopsFile = ../../secrets/env.yaml;
|
# sopsFile = ../../secrets/env.yaml;
|
||||||
@@ -40,16 +40,6 @@ in
|
|||||||
# owner = config.users.users.jawz.name;
|
# owner = config.users.users.jawz.name;
|
||||||
# inherit (config.users.users.jawz) group;
|
# inherit (config.users.users.jawz) group;
|
||||||
# };
|
# };
|
||||||
programs = {
|
|
||||||
gamemode.enable = true;
|
|
||||||
steam = {
|
|
||||||
enable = true;
|
|
||||||
gamescopeSession.enable = true;
|
|
||||||
remotePlay.openFirewall = true;
|
|
||||||
dedicatedServer.openFirewall = true;
|
|
||||||
platformOptimizations.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
services = lib.mkIf config.my.apps.switch.enable {
|
services = lib.mkIf config.my.apps.switch.enable {
|
||||||
switch-boot.enable = true;
|
switch-boot.enable = true;
|
||||||
# switch-presence = {
|
# switch-presence = {
|
||||||
@@ -80,5 +70,15 @@ in
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
inputs.self.lib.mkUserPackages lib config.my.apps.gaming.users packages;
|
inputs.self.lib.mkUserPackages lib config.my.apps.gaming.users packages;
|
||||||
|
programs = {
|
||||||
|
gamemode.enable = true;
|
||||||
|
steam = {
|
||||||
|
enable = true;
|
||||||
|
gamescopeSession.enable = true;
|
||||||
|
remotePlay.openFirewall = true;
|
||||||
|
dedicatedServer.openFirewall = true;
|
||||||
|
platformOptimizations.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,13 @@ let
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
cfg = config.my.apps.internet;
|
cfg = config.my.apps.internet;
|
||||||
|
krisp-patch = builtins.readFile (
|
||||||
|
pkgs.fetchurl {
|
||||||
|
url = "https://pastebin.com/raw/8tQDsMVd";
|
||||||
|
sha256 = "sha256-IdXv0MfRG1/1pAAwHLS2+1NESFEz2uXrbSdvU9OvdJ8=";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
krisp-patcher = pkgs.writers.writePython3Bin "krisp-patcher" krisp-settings krisp-patch;
|
||||||
krisp-settings = {
|
krisp-settings = {
|
||||||
libraries = builtins.attrValues {
|
libraries = builtins.attrValues {
|
||||||
inherit (pkgs.python3Packages)
|
inherit (pkgs.python3Packages)
|
||||||
@@ -32,13 +39,6 @@ let
|
|||||||
"F405"
|
"F405"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
krisp-patch = builtins.readFile (
|
|
||||||
pkgs.fetchurl {
|
|
||||||
url = "https://pastebin.com/raw/8tQDsMVd";
|
|
||||||
sha256 = "sha256-IdXv0MfRG1/1pAAwHLS2+1NESFEz2uXrbSdvU9OvdJ8=";
|
|
||||||
}
|
|
||||||
);
|
|
||||||
krisp-patcher = pkgs.writers.writePython3Bin "krisp-patcher" krisp-settings krisp-patch;
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.my.apps.internet.enable = lib.mkEnableOption "internet browsers and communication apps";
|
options.my.apps.internet.enable = lib.mkEnableOption "internet browsers and communication apps";
|
||||||
|
|||||||
@@ -1,19 +1,20 @@
|
|||||||
{ pkgs }:
|
{ pkgs }:
|
||||||
let
|
let
|
||||||
packages = builtins.attrValues {
|
basePackages = builtins.attrValues {
|
||||||
inherit (pkgs)
|
inherit (pkgs)
|
||||||
clang
|
|
||||||
clang-tools
|
clang-tools
|
||||||
gcc
|
gcc
|
||||||
gdb
|
gdb
|
||||||
valgrind
|
valgrind
|
||||||
;
|
;
|
||||||
};
|
};
|
||||||
|
homePackages = basePackages;
|
||||||
|
devShellPackages = basePackages ++ [ pkgs.clang ];
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit packages;
|
inherit devShellPackages homePackages;
|
||||||
devShell = pkgs.mkShell {
|
devShell = pkgs.mkShell {
|
||||||
inherit packages;
|
packages = devShellPackages;
|
||||||
name = "cc-dev-shell";
|
name = "cc-dev-shell";
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
echo "🔧 C/C++ dev environment"
|
echo "🔧 C/C++ dev environment"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ in
|
|||||||
my.dev.cc.enable = lib.mkDefault hm.enabledByDefault;
|
my.dev.cc.enable = lib.mkDefault hm.enabledByDefault;
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
home.packages = feature.packages;
|
home.packages = feature.homePackages;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.cc = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "C/C++ development shell";
|
||||||
|
};
|
||||||
my.dev.cc = {
|
my.dev.cc = {
|
||||||
enable = lib.mkEnableOption "Install C/C++ tooling globally";
|
enable = lib.mkEnableOption "Install C/C++ tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install C/C++ packages for";
|
description = "Users to install C/C++ packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.cc = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "C/C++ development shell";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,10 @@ in
|
|||||||
my.dev.docker.enable = lib.mkDefault hm.enabledByDefault;
|
my.dev.docker.enable = lib.mkDefault hm.enabledByDefault;
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
home.packages = feature.packages;
|
home = {
|
||||||
home.sessionVariables.DOCKER_CONFIG = "${config.xdg.configHome}/docker";
|
inherit (feature) packages;
|
||||||
|
sessionVariables.DOCKER_CONFIG = "${config.xdg.configHome}/docker";
|
||||||
|
};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.docker = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "Docker and Dockerfile tooling shell";
|
||||||
|
};
|
||||||
my.dev.docker = {
|
my.dev.docker = {
|
||||||
enable = lib.mkEnableOption "Install Docker tooling globally";
|
enable = lib.mkEnableOption "Install Docker tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install Docker packages for";
|
description = "Users to install Docker packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.docker = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "Docker and Dockerfile tooling shell";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,20 @@ let
|
|||||||
inherit (pkgs) xdotool;
|
inherit (pkgs) xdotool;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
doomDir = ../../../dotfiles/doom;
|
||||||
|
templateFiles = {
|
||||||
|
"events.org" = ../../../dotfiles/doom/templates/events.org;
|
||||||
|
"default.org" = ../../../dotfiles/doom/templates/default.org;
|
||||||
|
"programming.org" = ../../../dotfiles/doom/templates/programming.org;
|
||||||
|
};
|
||||||
|
templateDataFiles = {
|
||||||
|
"doom/templates/events.org".source = templateFiles."events.org";
|
||||||
|
"doom/templates/default.org".source = templateFiles."default.org";
|
||||||
|
"doom/templates/programming.org".source = templateFiles."programming.org";
|
||||||
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
inherit doomDir templateDataFiles templateFiles;
|
||||||
packages =
|
packages =
|
||||||
linuxWindowPackages
|
linuxWindowPackages
|
||||||
++ clipboardPackages
|
++ clipboardPackages
|
||||||
|
|||||||
@@ -25,19 +25,15 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ inputs.doom-emacs.homeModule ];
|
|
||||||
options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration";
|
options.my.emacs.enable = lib.mkEnableOption "Doom Emacs configuration";
|
||||||
|
imports = [ inputs.doom-emacs.homeModule ];
|
||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
{
|
{
|
||||||
my.emacs.enable = lib.mkDefault hm.enabledByDefault;
|
my.emacs.enable = lib.mkDefault hm.enabledByDefault;
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
home.packages = emacs.packages;
|
home.packages = emacs.packages;
|
||||||
xdg.dataFile = {
|
xdg.dataFile = emacs.templateDataFiles;
|
||||||
"doom/templates/events.org".source = ../../../dotfiles/doom/templates/events.org;
|
|
||||||
"doom/templates/default.org".source = ../../../dotfiles/doom/templates/default.org;
|
|
||||||
"doom/templates/programming.org".source = ../../../dotfiles/doom/templates/programming.org;
|
|
||||||
};
|
|
||||||
services = {
|
services = {
|
||||||
lorri.enable = pkgs.stdenv.isLinux;
|
lorri.enable = pkgs.stdenv.isLinux;
|
||||||
emacs = {
|
emacs = {
|
||||||
@@ -51,7 +47,7 @@ in
|
|||||||
};
|
};
|
||||||
programs.doom-emacs = {
|
programs.doom-emacs = {
|
||||||
enable = true;
|
enable = true;
|
||||||
doomDir = ../../../dotfiles/doom;
|
inherit (emacs) doomDir;
|
||||||
doomLocalDir = "${config.xdg.dataHome}/nix-doom";
|
doomLocalDir = "${config.xdg.dataHome}/nix-doom";
|
||||||
tangleArgs = "--all config.org";
|
tangleArgs = "--all config.org";
|
||||||
inherit (emacs) extraPackages;
|
inherit (emacs) extraPackages;
|
||||||
|
|||||||
109
modules/dev/emacs/portable.nix
Normal file
109
modules/dev/emacs/portable.nix
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
emacs = import ./common.nix {
|
||||||
|
inherit pkgs;
|
||||||
|
lib = pkgs.lib;
|
||||||
|
stylixEnabled = false;
|
||||||
|
emacsExtraConfig = "";
|
||||||
|
emacsExtraPackages = _epkgs: [ ];
|
||||||
|
};
|
||||||
|
portableFonts =
|
||||||
|
let
|
||||||
|
customFonts = pkgs.stdenvNoCC.mkDerivation {
|
||||||
|
name = "portable-emacs-fonts";
|
||||||
|
src = inputs.fonts;
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/share/fonts
|
||||||
|
find $src -type f \( \
|
||||||
|
-name "*.ttf" -o \
|
||||||
|
-name "*.otf" -o \
|
||||||
|
-name "*.woff" -o \
|
||||||
|
-name "*.woff2" \
|
||||||
|
\) -exec cp {} $out/share/fonts/ \;
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
builtins.attrValues {
|
||||||
|
inherit customFonts;
|
||||||
|
inherit (pkgs.nerd-fonts)
|
||||||
|
comic-shanns-mono
|
||||||
|
iosevka
|
||||||
|
caskaydia-cove
|
||||||
|
;
|
||||||
|
};
|
||||||
|
portableHome = inputs.home-manager.lib.homeManagerConfiguration {
|
||||||
|
inherit pkgs;
|
||||||
|
modules = [
|
||||||
|
../../../modules/home-manager.nix
|
||||||
|
../../../config/home-manager.nix
|
||||||
|
{
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
home = {
|
||||||
|
username = "portable";
|
||||||
|
homeDirectory = if pkgs.stdenv.isDarwin then "/Users/portable" else "/home/portable";
|
||||||
|
stateVersion = "23.05";
|
||||||
|
};
|
||||||
|
my = {
|
||||||
|
emacs.enable = true;
|
||||||
|
shell.tools.enable = true;
|
||||||
|
dev = {
|
||||||
|
nix.enable = true;
|
||||||
|
python.enable = true;
|
||||||
|
sh.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
extraSpecialArgs = {
|
||||||
|
inherit inputs;
|
||||||
|
outputs = inputs.self;
|
||||||
|
osConfig = null;
|
||||||
|
preferredShell = "zsh";
|
||||||
|
userEmail = "danilo.reyes.251@proton.me";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
templateFarm = pkgs.linkFarm "portable-emacs-templates" (
|
||||||
|
builtins.attrNames emacs.templateFiles
|
||||||
|
|> map (name: {
|
||||||
|
inherit name;
|
||||||
|
path = emacs.templateFiles.${name};
|
||||||
|
})
|
||||||
|
);
|
||||||
|
fontConfig = pkgs.makeFontsConf {
|
||||||
|
fontDirectories = map (font: "${font}/share/fonts") portableFonts;
|
||||||
|
};
|
||||||
|
package = pkgs.writeShellApplication {
|
||||||
|
name = "doom-emacs";
|
||||||
|
runtimeInputs = [
|
||||||
|
portableHome.config.programs.doom-emacs.finalEmacsPackage
|
||||||
|
]
|
||||||
|
++ portableHome.config.home.packages;
|
||||||
|
text = ''
|
||||||
|
export HOME="''${HOME:?HOME must be set}"
|
||||||
|
export XDG_CONFIG_HOME="''${XDG_CONFIG_HOME:-$HOME/.config}"
|
||||||
|
export XDG_CACHE_HOME="''${XDG_CACHE_HOME:-$HOME/.cache}"
|
||||||
|
export XDG_STATE_HOME="''${XDG_STATE_HOME:-$HOME/.local/state}"
|
||||||
|
export XDG_DATA_HOME="''${XDG_DATA_HOME:-$HOME/.local/share}"
|
||||||
|
export DOOMDIR="${emacs.doomDir}"
|
||||||
|
export DOOMLOCALDIR="$XDG_DATA_HOME/nix-doom"
|
||||||
|
export FONTCONFIG_FILE="${fontConfig}"
|
||||||
|
mkdir -p "$XDG_DATA_HOME/doom/templates" "$DOOMLOCALDIR" "$XDG_CACHE_HOME" "$XDG_STATE_HOME"
|
||||||
|
ln -sfn "${templateFarm}/events.org" "$XDG_DATA_HOME/doom/templates/events.org"
|
||||||
|
ln -sfn "${templateFarm}/default.org" "$XDG_DATA_HOME/doom/templates/default.org"
|
||||||
|
ln -sfn "${templateFarm}/programming.org" "$XDG_DATA_HOME/doom/templates/programming.org"
|
||||||
|
exec ${portableHome.config.programs.doom-emacs.finalEmacsPackage}/bin/emacs "$@"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
inherit package;
|
||||||
|
app = {
|
||||||
|
type = "app";
|
||||||
|
program = "${package}/bin/doom-emacs";
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,22 +1,24 @@
|
|||||||
{ pkgs }:
|
{ pkgs }:
|
||||||
let
|
let
|
||||||
packages = builtins.attrValues {
|
basePackages = builtins.attrValues {
|
||||||
inherit (pkgs)
|
inherit (pkgs)
|
||||||
go
|
go
|
||||||
gocode-gomod
|
gocode-gomod
|
||||||
gotools
|
|
||||||
gore
|
gore
|
||||||
gotests
|
gotests
|
||||||
gomodifytags
|
gomodifytags
|
||||||
golangci-lint
|
golangci-lint
|
||||||
;
|
;
|
||||||
};
|
};
|
||||||
|
homePackages = basePackages;
|
||||||
|
devShellPackages = basePackages ++ [ pkgs.gotools ];
|
||||||
GOPATH = "\${XDG_DATA_HOME:-\$HOME/.local/share}/go";
|
GOPATH = "\${XDG_DATA_HOME:-\$HOME/.local/share}/go";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit packages GOPATH;
|
inherit devShellPackages homePackages GOPATH;
|
||||||
devShell = pkgs.mkShell {
|
devShell = pkgs.mkShell {
|
||||||
inherit packages GOPATH;
|
packages = devShellPackages;
|
||||||
|
inherit GOPATH;
|
||||||
name = "go-dev-shell";
|
name = "go-dev-shell";
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
echo "🐹 Go dev environment"
|
echo "🐹 Go dev environment"
|
||||||
|
|||||||
@@ -28,8 +28,10 @@ in
|
|||||||
my.dev.go.enable = lib.mkDefault hm.enabledByDefault;
|
my.dev.go.enable = lib.mkDefault hm.enabledByDefault;
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
home.packages = feature.packages;
|
home = {
|
||||||
home.sessionVariables.GOPATH = "${config.xdg.dataHome}/go";
|
packages = feature.homePackages;
|
||||||
|
sessionVariables.GOPATH = "${config.xdg.dataHome}/go";
|
||||||
|
};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.go = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "Go development shell with Emacs tooling, REPL, formatter, and linter";
|
||||||
|
};
|
||||||
my.dev.go = {
|
my.dev.go = {
|
||||||
enable = lib.mkEnableOption "Install Go tooling globally";
|
enable = lib.mkEnableOption "Install Go tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install Go packages for";
|
description = "Users to install Go packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.go = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "Go development shell with Emacs tooling, REPL, formatter, and linter";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,14 @@ in
|
|||||||
my.dev.haskell.enable = lib.mkDefault hm.enabledByDefault;
|
my.dev.haskell.enable = lib.mkDefault hm.enabledByDefault;
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
home.packages = feature.packages;
|
home = {
|
||||||
home.sessionVariables = {
|
inherit (feature) packages;
|
||||||
|
sessionVariables = {
|
||||||
CABAL_DIR = "${config.xdg.cacheHome}/cabal";
|
CABAL_DIR = "${config.xdg.cacheHome}/cabal";
|
||||||
STACK_ROOT = "${config.xdg.dataHome}/stack";
|
STACK_ROOT = "${config.xdg.dataHome}/stack";
|
||||||
GHCUP_USE_XDG_DIRS = "true";
|
GHCUP_USE_XDG_DIRS = "true";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.haskell = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "Haskell development shell";
|
||||||
|
};
|
||||||
my.dev.haskell = {
|
my.dev.haskell = {
|
||||||
enable = lib.mkEnableOption "Install Haskell tooling globally";
|
enable = lib.mkEnableOption "Install Haskell tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install Haskell packages for";
|
description = "Users to install Haskell packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.haskell = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "Haskell development shell";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ in
|
|||||||
echo "📦 JavaScript dev environment"
|
echo "📦 JavaScript dev environment"
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
sessionVariables = {
|
|
||||||
NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc";
|
|
||||||
PNPM_HOME = "\${XDG_DATA_HOME}/pnpm";
|
|
||||||
};
|
|
||||||
sessionPath = [
|
sessionPath = [
|
||||||
"\${XDG_DATA_HOME}/npm/bin"
|
"\${XDG_DATA_HOME}/npm/bin"
|
||||||
"\${XDG_DATA_HOME}/pnpm"
|
"\${XDG_DATA_HOME}/pnpm"
|
||||||
];
|
];
|
||||||
|
sessionVariables = {
|
||||||
|
NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc";
|
||||||
|
PNPM_HOME = "\${XDG_DATA_HOME}/pnpm";
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.javascript = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = javascript.devShell;
|
||||||
|
description = "JavaScript/Node development shell with npm/pnpm support";
|
||||||
|
};
|
||||||
my.dev.javascript = {
|
my.dev.javascript = {
|
||||||
enable = lib.mkEnableOption "Install JavaScript tooling globally";
|
enable = lib.mkEnableOption "Install JavaScript tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install JavaScript packages for";
|
description = "Users to install JavaScript packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.javascript = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = javascript.devShell;
|
|
||||||
description = "JavaScript/Node development shell with npm/pnpm support";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.julia = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "Julia development shell";
|
||||||
|
};
|
||||||
my.dev.julia = {
|
my.dev.julia = {
|
||||||
enable = lib.mkEnableOption "Install Julia globally";
|
enable = lib.mkEnableOption "Install Julia globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install Julia packages for";
|
description = "Users to install Julia packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.julia = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "Julia development shell";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.mcp = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "MCP dev shell for this repo";
|
||||||
|
};
|
||||||
my.dev.mcp = {
|
my.dev.mcp = {
|
||||||
enable = lib.mkEnableOption "Install MCP tooling globally";
|
enable = lib.mkEnableOption "Install MCP tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install MCP packages for";
|
description = "Users to install MCP packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.mcp = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "MCP dev shell for this repo";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.nix = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = nix.devShell;
|
||||||
|
description = "Nix/NixOS development shell with formatter, linter, LSP, and Cachix";
|
||||||
|
};
|
||||||
my.dev.nix = {
|
my.dev.nix = {
|
||||||
enable = lib.mkEnableOption "Install Nix tooling globally";
|
enable = lib.mkEnableOption "Install Nix tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -21,10 +26,5 @@ in
|
|||||||
description = "Users to install Nix packages for";
|
description = "Users to install Nix packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.nix = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = nix.devShell;
|
|
||||||
description = "Nix/NixOS development shell with formatter, linter, LSP, and Cachix";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.python = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = python.devShell;
|
||||||
|
};
|
||||||
my.dev.python = {
|
my.dev.python = {
|
||||||
enable = lib.mkEnableOption "Install Python tools globally";
|
enable = lib.mkEnableOption "Install Python tools globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,9 +22,5 @@ in
|
|||||||
description = "Users to install Python packages for";
|
description = "Users to install Python packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.python = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = python.devShell;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,12 +28,14 @@ in
|
|||||||
my.dev.ruby.enable = lib.mkDefault hm.enabledByDefault;
|
my.dev.ruby.enable = lib.mkDefault hm.enabledByDefault;
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
home.packages = feature.packages;
|
home = {
|
||||||
home.sessionVariables = {
|
inherit (feature) packages;
|
||||||
|
sessionVariables = {
|
||||||
GEM_HOME = "${config.xdg.dataHome}/ruby/gems";
|
GEM_HOME = "${config.xdg.dataHome}/ruby/gems";
|
||||||
GEM_PATH = "${config.xdg.dataHome}/ruby/gems";
|
GEM_PATH = "${config.xdg.dataHome}/ruby/gems";
|
||||||
GEM_SPEC_CACHE = "${config.xdg.dataHome}/ruby/specs";
|
GEM_SPEC_CACHE = "${config.xdg.dataHome}/ruby/specs";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.ruby = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "Ruby development shell with interpreter and Solargraph LSP";
|
||||||
|
};
|
||||||
my.dev.ruby = {
|
my.dev.ruby = {
|
||||||
enable = lib.mkEnableOption "Install Ruby tooling globally";
|
enable = lib.mkEnableOption "Install Ruby tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install Ruby packages for";
|
description = "Users to install Ruby packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.ruby = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "Ruby development shell with interpreter and Solargraph LSP";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,10 @@ in
|
|||||||
my.dev.rust.enable = lib.mkDefault hm.enabledByDefault;
|
my.dev.rust.enable = lib.mkDefault hm.enabledByDefault;
|
||||||
}
|
}
|
||||||
(lib.mkIf cfg.enable {
|
(lib.mkIf cfg.enable {
|
||||||
home.packages = feature.packages;
|
home = {
|
||||||
home.sessionVariables.CARGO_HOME = "${config.xdg.dataHome}/cargo";
|
inherit (feature) packages;
|
||||||
|
sessionVariables.CARGO_HOME = "${config.xdg.dataHome}/cargo";
|
||||||
|
};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.rust = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "Rust development shell with cargo and rust-analyzer";
|
||||||
|
};
|
||||||
my.dev.rust = {
|
my.dev.rust = {
|
||||||
enable = lib.mkEnableOption "Install Rust tooling globally";
|
enable = lib.mkEnableOption "Install Rust tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install Rust packages for";
|
description = "Users to install Rust packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.rust = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "Rust development shell with cargo and rust-analyzer";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.sh = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = sh.devShell;
|
||||||
|
description = "Shell scripting dev shell";
|
||||||
|
};
|
||||||
my.dev.sh = {
|
my.dev.sh = {
|
||||||
enable = lib.mkEnableOption "Install shell scripting tools globally";
|
enable = lib.mkEnableOption "Install shell scripting tools globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install shell scripting packages for";
|
description = "Users to install shell scripting packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.sh = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = sh.devShell;
|
|
||||||
description = "Shell scripting dev shell";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
|
devShells.zig = lib.mkOption {
|
||||||
|
type = lib.types.package;
|
||||||
|
default = feature.devShell;
|
||||||
|
description = "Zig development shell with compiler and LSP";
|
||||||
|
};
|
||||||
my.dev.zig = {
|
my.dev.zig = {
|
||||||
enable = lib.mkEnableOption "Install Zig tooling globally";
|
enable = lib.mkEnableOption "Install Zig tooling globally";
|
||||||
users = lib.mkOption {
|
users = lib.mkOption {
|
||||||
@@ -18,10 +23,5 @@ in
|
|||||||
description = "Users to install Zig packages for";
|
description = "Users to install Zig packages for";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
devShells.zig = lib.mkOption {
|
|
||||||
type = lib.types.package;
|
|
||||||
default = feature.devShell;
|
|
||||||
description = "Zig development shell with compiler and LSP";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,8 @@
|
|||||||
lib.mkMerge (
|
lib.mkMerge (
|
||||||
lib.mapAttrsToList (user: packages: inputs.self.lib.mkUserPackages lib user packages) userMap
|
lib.mapAttrsToList (user: packages: inputs.self.lib.mkUserPackages lib user packages) userMap
|
||||||
);
|
);
|
||||||
systemd.user.services =
|
systemd.user = {
|
||||||
|
services =
|
||||||
config.my.scripts
|
config.my.scripts
|
||||||
|> lib.mapAttrs' (
|
|> lib.mapAttrs' (
|
||||||
_name: script:
|
_name: script:
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
systemd.user.timers =
|
timers =
|
||||||
config.my.scripts
|
config.my.scripts
|
||||||
|> lib.mapAttrs' (
|
|> lib.mapAttrs' (
|
||||||
_name: script:
|
_name: script:
|
||||||
@@ -102,4 +103,5 @@
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ in
|
|||||||
};
|
};
|
||||||
ips = lib.mkOption {
|
ips = lib.mkOption {
|
||||||
type = lib.types.attrsOf lib.types.str;
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
description = "Set of IP's for all my computers.";
|
||||||
default = {
|
default = {
|
||||||
router = "192.168.100.1";
|
router = "192.168.100.1";
|
||||||
server = "192.168.100.15";
|
server = "192.168.100.15";
|
||||||
@@ -73,35 +74,34 @@ in
|
|||||||
wg-friend5 = "10.8.0.6";
|
wg-friend5 = "10.8.0.6";
|
||||||
wg-friend6 = "10.8.0.7";
|
wg-friend6 = "10.8.0.7";
|
||||||
};
|
};
|
||||||
description = "Set of IP's for all my computers.";
|
|
||||||
};
|
};
|
||||||
subnets = lib.mkOption {
|
subnets = lib.mkOption {
|
||||||
type = lib.types.attrsOf lib.types.str;
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
description = "Set of subnets for WireGuard networks.";
|
||||||
default = {
|
default = {
|
||||||
wg-homelab = "10.77.0.0/24";
|
wg-homelab = "10.77.0.0/24";
|
||||||
wg-friends = "10.8.0.0/24";
|
wg-friends = "10.8.0.0/24";
|
||||||
wg-guests = "10.9.0.0/24";
|
wg-guests = "10.9.0.0/24";
|
||||||
};
|
};
|
||||||
description = "Set of subnets for WireGuard networks.";
|
|
||||||
};
|
};
|
||||||
wgInterfaces = lib.mkOption {
|
wgInterfaces = lib.mkOption {
|
||||||
type = lib.types.attrsOf lib.types.str;
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
description = "WireGuard interface IPs for the VPS.";
|
||||||
default = {
|
default = {
|
||||||
wg-homelab = "10.77.0.1/24";
|
wg-homelab = "10.77.0.1/24";
|
||||||
wg-friends = "10.8.0.1/24";
|
wg-friends = "10.8.0.1/24";
|
||||||
wg-guests = "10.9.0.1/24";
|
wg-guests = "10.9.0.1/24";
|
||||||
};
|
};
|
||||||
description = "WireGuard interface IPs for the VPS.";
|
|
||||||
};
|
};
|
||||||
interfaces = lib.mkOption {
|
interfaces = lib.mkOption {
|
||||||
type = lib.types.attrsOf lib.types.str;
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
description = "Set of network interface names for all my computers.";
|
||||||
default = {
|
default = {
|
||||||
server = "enp0s31f6";
|
server = "enp0s31f6";
|
||||||
miniserver = "enp2s0";
|
miniserver = "enp2s0";
|
||||||
workstation = "enp5s0";
|
workstation = "enp5s0";
|
||||||
vps = "eth0";
|
vps = "eth0";
|
||||||
};
|
};
|
||||||
description = "Set of network interface names for all my computers.";
|
|
||||||
};
|
};
|
||||||
mainServer = lib.mkOption {
|
mainServer = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
@@ -130,6 +130,7 @@ in
|
|||||||
};
|
};
|
||||||
ports = lib.mkOption {
|
ports = lib.mkOption {
|
||||||
type = lib.types.attrsOf lib.types.port;
|
type = lib.types.attrsOf lib.types.port;
|
||||||
|
description = "Common port assignments for local services and firewall rules.";
|
||||||
default = {
|
default = {
|
||||||
comfyui = 8188;
|
comfyui = 8188;
|
||||||
giteaSsh = 22;
|
giteaSsh = 22;
|
||||||
@@ -147,7 +148,6 @@ in
|
|||||||
wg = 51820;
|
wg = 51820;
|
||||||
ssh = 3456;
|
ssh = 3456;
|
||||||
};
|
};
|
||||||
description = "Common port assignments for local services and firewall rules.";
|
|
||||||
};
|
};
|
||||||
email = lib.mkOption {
|
email = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
@@ -168,6 +168,7 @@ in
|
|||||||
};
|
};
|
||||||
toggleUsers = lib.mkOption {
|
toggleUsers = lib.mkOption {
|
||||||
type = lib.types.attrsOf (lib.types.either lib.types.str (lib.types.listOf lib.types.str));
|
type = lib.types.attrsOf (lib.types.either lib.types.str (lib.types.listOf lib.types.str));
|
||||||
|
description = "Map toggle categories to users. Can be a single user (string) or multiple users (list). Determines which user(s) get packages from each toggle category.";
|
||||||
default = {
|
default = {
|
||||||
apps = "jawz";
|
apps = "jawz";
|
||||||
dev = "jawz";
|
dev = "jawz";
|
||||||
@@ -176,7 +177,6 @@ in
|
|||||||
services = "jawz";
|
services = "jawz";
|
||||||
stylix = "jawz";
|
stylix = "jawz";
|
||||||
};
|
};
|
||||||
description = "Map toggle categories to users. Can be a single user (string) or multiple users (list). Determines which user(s) get packages from each toggle category.";
|
|
||||||
example = {
|
example = {
|
||||||
apps = "jawz";
|
apps = "jawz";
|
||||||
dev = "bearded_dragonn";
|
dev = "bearded_dragonn";
|
||||||
|
|||||||
@@ -30,8 +30,8 @@
|
|||||||
description = "Maximum number of parallel jobs (null = auto-detect)";
|
description = "Maximum number of parallel jobs (null = auto-detect)";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = {
|
config.nix = {
|
||||||
nix.settings = lib.mkMerge [
|
settings = lib.mkMerge [
|
||||||
{
|
{
|
||||||
system-features = config.my.nix.features;
|
system-features = config.my.nix.features;
|
||||||
}
|
}
|
||||||
@@ -42,6 +42,6 @@
|
|||||||
max-jobs = config.my.nix.maxJobs;
|
max-jobs = config.my.nix.maxJobs;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
nix.buildMachines = lib.mkIf (config.my.nix.buildMachines != [ ]) config.my.nix.buildMachines;
|
buildMachines = lib.mkIf (config.my.nix.buildMachines != [ ]) config.my.nix.buildMachines;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ let
|
|||||||
inputs.self.lib.hmOnlyUser config osConfig "jawz"
|
inputs.self.lib.hmOnlyUser config osConfig "jawz"
|
||||||
&& (osConfig.my.units.download.enable || osConfig.my.units.downloadManga.enable);
|
&& (osConfig.my.units.download.enable || osConfig.my.units.downloadManga.enable);
|
||||||
download = import ./common.nix {
|
download = import ./common.nix {
|
||||||
config = if osConfig == null then { } else osConfig;
|
|
||||||
inherit inputs lib pkgs;
|
inherit inputs lib pkgs;
|
||||||
|
config = if osConfig == null then { } else osConfig;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ in
|
|||||||
options.my.servers.drpp = setup.mkOptions "drpp" "drpp" 0;
|
options.my.servers.drpp = setup.mkOptions "drpp" "drpp" 0;
|
||||||
config.virtualisation.oci-containers.containers.drpp = lib.mkIf cfg.enable {
|
config.virtualisation.oci-containers.containers.drpp = lib.mkIf cfg.enable {
|
||||||
image = "ghcr.io/phin05/discord-rich-presence-plex:latest";
|
image = "ghcr.io/phin05/discord-rich-presence-plex:latest";
|
||||||
environment = {
|
|
||||||
DRPP_UID = toString config.users.users.jawz.uid;
|
|
||||||
DRPP_GID = toString config.users.groups.users.gid;
|
|
||||||
};
|
|
||||||
volumes = [
|
volumes = [
|
||||||
"${config.my.containerData}/drpp:/app/data"
|
"${config.my.containerData}/drpp:/app/data"
|
||||||
"/run/user/${toString config.users.users.jawz.uid}:/run/app"
|
"/run/user/${toString config.users.users.jawz.uid}:/run/app"
|
||||||
];
|
];
|
||||||
|
environment = {
|
||||||
|
DRPP_UID = toString config.users.users.jawz.uid;
|
||||||
|
DRPP_GID = toString config.users.groups.users.gid;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,7 @@ in
|
|||||||
flameSecret = setup.mkOptions "flameSecret" "qampqwn4wprhqny8h8zj" 5007;
|
flameSecret = setup.mkOptions "flameSecret" "qampqwn4wprhqny8h8zj" 5007;
|
||||||
};
|
};
|
||||||
config = lib.mkIf enable {
|
config = lib.mkIf enable {
|
||||||
sops.secrets = {
|
sops.secrets.flame.sopsFile = ../../secrets/env.yaml;
|
||||||
flame.sopsFile = ../../secrets/env.yaml;
|
|
||||||
};
|
|
||||||
virtualisation.oci-containers.containers = lib.mkIf enable {
|
virtualisation.oci-containers.containers = lib.mkIf enable {
|
||||||
flame = lib.mkIf cfg.enable {
|
flame = lib.mkIf cfg.enable {
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ let
|
|||||||
cfg = config.my.servers.gitea;
|
cfg = config.my.servers.gitea;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
options.my.servers.gitea = setup.mkOptions "gitea" "git" 9083;
|
||||||
imports = [
|
imports = [
|
||||||
../nix/gitea-actions-runners/nixos.nix
|
../nix/gitea-actions-runners/nixos.nix
|
||||||
../nix/gitea-actions-runners/docker.nix
|
../nix/gitea-actions-runners/docker.nix
|
||||||
];
|
];
|
||||||
options.my.servers.gitea = setup.mkOptions "gitea" "git" 9083;
|
|
||||||
config = lib.mkIf (cfg.enable && config.my.secureHost) {
|
config = lib.mkIf (cfg.enable && config.my.secureHost) {
|
||||||
sops.secrets.gitea.sopsFile = ../../secrets/env.yaml;
|
sops.secrets.gitea.sopsFile = ../../secrets/env.yaml;
|
||||||
users.groups.gitea.gid = 974;
|
users.groups.gitea.gid = 974;
|
||||||
|
|||||||
@@ -154,8 +154,8 @@
|
|||||||
icon = "${name}.png";
|
icon = "${name}.png";
|
||||||
href = url;
|
href = url;
|
||||||
widget = {
|
widget = {
|
||||||
type = name;
|
|
||||||
inherit url;
|
inherit url;
|
||||||
|
type = name;
|
||||||
username = "{{HOMEPAGE_VAR_QBIT_USERNAME}}";
|
username = "{{HOMEPAGE_VAR_QBIT_USERNAME}}";
|
||||||
password = "{{HOMEPAGE_VAR_QBIT_PASSWORD}}";
|
password = "{{HOMEPAGE_VAR_QBIT_PASSWORD}}";
|
||||||
};
|
};
|
||||||
@@ -169,8 +169,8 @@
|
|||||||
icon = "${name}.png";
|
icon = "${name}.png";
|
||||||
href = url;
|
href = url;
|
||||||
widget = {
|
widget = {
|
||||||
type = name;
|
|
||||||
inherit url;
|
inherit url;
|
||||||
|
type = name;
|
||||||
key = "{{HOMEPAGE_VAR_SABNZBD}}";
|
key = "{{HOMEPAGE_VAR_SABNZBD}}";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -231,9 +231,9 @@
|
|||||||
icon = "paperless.png";
|
icon = "paperless.png";
|
||||||
href = url;
|
href = url;
|
||||||
widget = {
|
widget = {
|
||||||
|
inherit url;
|
||||||
type = name;
|
type = name;
|
||||||
key = "{{HOMEPAGE_VAR_PAPERLESS}}";
|
key = "{{HOMEPAGE_VAR_PAPERLESS}}";
|
||||||
inherit url;
|
|
||||||
fields = [
|
fields = [
|
||||||
"total"
|
"total"
|
||||||
"inbox"
|
"inbox"
|
||||||
@@ -262,9 +262,9 @@
|
|||||||
icon = "${name}.png";
|
icon = "${name}.png";
|
||||||
href = url;
|
href = url;
|
||||||
widget = {
|
widget = {
|
||||||
|
inherit url;
|
||||||
type = name;
|
type = name;
|
||||||
key = "{{HOMEPAGE_VAR_STASH}}";
|
key = "{{HOMEPAGE_VAR_STASH}}";
|
||||||
inherit url;
|
|
||||||
fields = [
|
fields = [
|
||||||
"scenes"
|
"scenes"
|
||||||
"images"
|
"images"
|
||||||
|
|||||||
@@ -22,14 +22,12 @@
|
|||||||
{
|
{
|
||||||
openweathermap = {
|
openweathermap = {
|
||||||
label = "Apodaca";
|
label = "Apodaca";
|
||||||
|
format.maximumFractionDigits = 1;
|
||||||
latitude = 25.760339;
|
latitude = 25.760339;
|
||||||
longitude = -100.2190662;
|
longitude = -100.2190662;
|
||||||
units = "metric";
|
units = "metric";
|
||||||
provider = "openweathermap";
|
provider = "openweathermap";
|
||||||
cache = 5;
|
cache = 5;
|
||||||
format = {
|
|
||||||
maximumFractionDigits = 1;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -54,11 +54,9 @@ in
|
|||||||
};
|
};
|
||||||
timers.sub-sync = {
|
timers.sub-sync = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
timerConfig.OnCalendar = "20:00";
|
||||||
description = "syncronizes subtitles downloaded & modified today";
|
description = "syncronizes subtitles downloaded & modified today";
|
||||||
wantedBy = [ "timers.target" ];
|
wantedBy = [ "timers.target" ];
|
||||||
timerConfig = {
|
|
||||||
OnCalendar = "20:00";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -13,11 +13,6 @@ in
|
|||||||
autoStart = true;
|
autoStart = true;
|
||||||
image = "linuxserver/lidarr:latest";
|
image = "linuxserver/lidarr:latest";
|
||||||
ports = [ "${toString cfg.port}:${toString cfg.port}" ];
|
ports = [ "${toString cfg.port}:${toString cfg.port}" ];
|
||||||
environment = {
|
|
||||||
TZ = config.my.timeZone;
|
|
||||||
PUID = toString config.users.users.jawz.uid;
|
|
||||||
PGID = toString config.users.groups.piracy.gid;
|
|
||||||
};
|
|
||||||
volumes = [
|
volumes = [
|
||||||
"/srv/pool/multimedia:/data"
|
"/srv/pool/multimedia:/data"
|
||||||
"/srv/pool/multimedia/media/Music:/music"
|
"/srv/pool/multimedia/media/Music:/music"
|
||||||
@@ -31,5 +26,10 @@ in
|
|||||||
extraOptions = [
|
extraOptions = [
|
||||||
"--network=host"
|
"--network=host"
|
||||||
];
|
];
|
||||||
|
environment = {
|
||||||
|
TZ = config.my.timeZone;
|
||||||
|
PUID = toString config.users.users.jawz.uid;
|
||||||
|
PGID = toString config.users.groups.piracy.gid;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ in
|
|||||||
image = "krateng/maloja:latest";
|
image = "krateng/maloja:latest";
|
||||||
ports = [ "${toString cfg.port}:${toString cfg.port}" ];
|
ports = [ "${toString cfg.port}:${toString cfg.port}" ];
|
||||||
environmentFiles = [ config.sops.secrets.maloja.path ];
|
environmentFiles = [ config.sops.secrets.maloja.path ];
|
||||||
|
volumes = [ "${config.my.containerData}/maloja:/mljdata" ];
|
||||||
environment = {
|
environment = {
|
||||||
TZ = config.my.timeZone;
|
TZ = config.my.timeZone;
|
||||||
MALOJA_TIMEZONE = "-6";
|
MALOJA_TIMEZONE = "-6";
|
||||||
@@ -23,7 +24,6 @@ in
|
|||||||
MALOJA_DATA_DIRECTORY = "/mljdata";
|
MALOJA_DATA_DIRECTORY = "/mljdata";
|
||||||
MALOJA_SKIP_SETUP = "true";
|
MALOJA_SKIP_SETUP = "true";
|
||||||
};
|
};
|
||||||
volumes = [ "${config.my.containerData}/maloja:/mljdata" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ in
|
|||||||
image = "foxxmd/multi-scrobbler:latest";
|
image = "foxxmd/multi-scrobbler:latest";
|
||||||
ports = [ "${toString cfg.port}:${toString cfg.port}" ];
|
ports = [ "${toString cfg.port}:${toString cfg.port}" ];
|
||||||
environmentFiles = [ config.sops.secrets.multi-scrobbler.path ];
|
environmentFiles = [ config.sops.secrets.multi-scrobbler.path ];
|
||||||
|
volumes = [ "${config.my.containerData}/multi-scrobbler:/config" ];
|
||||||
environment = {
|
environment = {
|
||||||
TZ = config.my.timeZone;
|
TZ = config.my.timeZone;
|
||||||
PUID = toString config.users.users.jawz.uid;
|
PUID = toString config.users.users.jawz.uid;
|
||||||
@@ -25,7 +26,6 @@ in
|
|||||||
PLEX_URL = "http://192.168.100.15:32400";
|
PLEX_URL = "http://192.168.100.15:32400";
|
||||||
WS_ENABLE = "true";
|
WS_ENABLE = "true";
|
||||||
};
|
};
|
||||||
volumes = [ "${config.my.containerData}/multi-scrobbler:/config" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ let
|
|||||||
version = "12.70";
|
version = "12.70";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
pname = "Image-ExifTool";
|
|
||||||
inherit version;
|
inherit version;
|
||||||
|
pname = "Image-ExifTool";
|
||||||
src = pkgs.fetchurl {
|
src = pkgs.fetchurl {
|
||||||
url = "https://exiftool.org/Image-ExifTool-${version}.tar.gz";
|
url = "https://exiftool.org/Image-ExifTool-${version}.tar.gz";
|
||||||
hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4=";
|
hash = "sha256-TLJSJEXMPj870TkExq6uraX8Wl4kmNerrSlX3LQsr/4=";
|
||||||
@@ -54,7 +54,9 @@ in
|
|||||||
"openssl-1.1.1v"
|
"openssl-1.1.1v"
|
||||||
];
|
];
|
||||||
users = {
|
users = {
|
||||||
groups.nextcloud = { inherit gid; };
|
groups.nextcloud = {
|
||||||
|
inherit gid;
|
||||||
|
};
|
||||||
users.nextcloud = {
|
users.nextcloud = {
|
||||||
inherit uid;
|
inherit uid;
|
||||||
isSystemUser = true;
|
isSystemUser = true;
|
||||||
@@ -189,20 +191,24 @@ in
|
|||||||
go-vod = lib.mkIf config.my.servers.go-vod.enable {
|
go-vod = lib.mkIf config.my.servers.go-vod.enable {
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
image = "radialapps/go-vod:latest";
|
image = "radialapps/go-vod:latest";
|
||||||
|
volumes = [ "ncdata:/var/www/html:ro" ];
|
||||||
|
extraOptions = [
|
||||||
|
"--device=/dev/dri" # VA-API (omit for NVENC)
|
||||||
|
];
|
||||||
environment = {
|
environment = {
|
||||||
TZ = config.my.timeZone;
|
TZ = config.my.timeZone;
|
||||||
NEXTCLOUD_HOST = "https://${config.services.nextcloud.hostName}";
|
NEXTCLOUD_HOST = "https://${config.services.nextcloud.hostName}";
|
||||||
NVIDIA_VISIBLE_DEVICES = "all";
|
NVIDIA_VISIBLE_DEVICES = "all";
|
||||||
};
|
};
|
||||||
volumes = [ "ncdata:/var/www/html:ro" ];
|
|
||||||
extraOptions = [
|
|
||||||
"--device=/dev/dri" # VA-API (omit for NVENC)
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
collabora = lib.mkIf cfgC.enable {
|
collabora = lib.mkIf cfgC.enable {
|
||||||
autoStart = true;
|
autoStart = true;
|
||||||
image = "collabora/code:latest";
|
image = "collabora/code:latest";
|
||||||
ports = [ "${toString cfgC.port}:${toString cfgC.port}" ];
|
ports = [ "${toString cfgC.port}:${toString cfgC.port}" ];
|
||||||
|
extraOptions = [
|
||||||
|
"--cap-add"
|
||||||
|
"MKNOD"
|
||||||
|
];
|
||||||
environment = {
|
environment = {
|
||||||
TZ = config.my.timeZone;
|
TZ = config.my.timeZone;
|
||||||
domain = cfg.host;
|
domain = cfg.host;
|
||||||
@@ -219,10 +225,6 @@ in
|
|||||||
DONT_GEN_SSL_CERT = "1";
|
DONT_GEN_SSL_CERT = "1";
|
||||||
SLEEPFORDEBUGGER = "0";
|
SLEEPFORDEBUGGER = "0";
|
||||||
};
|
};
|
||||||
extraOptions = [
|
|
||||||
"--cap-add"
|
|
||||||
"MKNOD"
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
systemd = lib.mkIf cfg.enableCron {
|
systemd = lib.mkIf cfg.enableCron {
|
||||||
@@ -248,11 +250,9 @@ in
|
|||||||
};
|
};
|
||||||
timers.nextcloud-cronjob = {
|
timers.nextcloud-cronjob = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
timerConfig.OnCalendar = "*:0/10";
|
||||||
description = "Runs various nextcloud-related cronjobs";
|
description = "Runs various nextcloud-related cronjobs";
|
||||||
wantedBy = [ "timers.target" ];
|
wantedBy = [ "timers.target" ];
|
||||||
timerConfig = {
|
|
||||||
OnCalendar = "*:0/10";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -53,7 +53,9 @@ in
|
|||||||
my.network.firewall.additionalPorts = [ config.my.servers.qbittorrent.port ];
|
my.network.firewall.additionalPorts = [ config.my.servers.qbittorrent.port ];
|
||||||
home-manager.users.jawz.xdg.dataFile.vuetorrent.source = vuetorrent;
|
home-manager.users.jawz.xdg.dataFile.vuetorrent.source = vuetorrent;
|
||||||
home-manager.users.jawz.imports = [
|
home-manager.users.jawz.imports = [
|
||||||
({ lib, ... }: {
|
(
|
||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
home.activation.qbittorrentAutorunCommand = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
home.activation.qbittorrentAutorunCommand = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
conf=/home/jawz/.config/qBittorrent/qBittorrent.conf
|
conf=/home/jawz/.config/qBittorrent/qBittorrent.conf
|
||||||
if [ -f "$conf" ]; then
|
if [ -f "$conf" ]; then
|
||||||
@@ -62,7 +64,8 @@ in
|
|||||||
"$conf"
|
"$conf"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
})
|
}
|
||||||
|
)
|
||||||
];
|
];
|
||||||
sops.secrets =
|
sops.secrets =
|
||||||
let
|
let
|
||||||
@@ -96,16 +99,6 @@ in
|
|||||||
};
|
};
|
||||||
user = {
|
user = {
|
||||||
services = {
|
services = {
|
||||||
qbit_manage = {
|
|
||||||
restartIfChanged = true;
|
|
||||||
description = "Tidy up my torrents";
|
|
||||||
wantedBy = [ "default.target" ];
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
TimeoutStartSec = "5min";
|
|
||||||
ExecStart = "${qbit_manageEnv}/bin/python ${qbit_manage}/qbit_manage.py -r -c /home/jawz/.config/qbit_manage/config.yml";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
unpackerr = lib.mkIf config.my.servers.unpackerr.enable {
|
unpackerr = lib.mkIf config.my.servers.unpackerr.enable {
|
||||||
enable = true;
|
enable = true;
|
||||||
restartIfChanged = true;
|
restartIfChanged = true;
|
||||||
@@ -127,6 +120,16 @@ in
|
|||||||
ExecStart = "${pkgs.unpackerr}/bin/unpackerr";
|
ExecStart = "${pkgs.unpackerr}/bin/unpackerr";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
qbit_manage = {
|
||||||
|
restartIfChanged = true;
|
||||||
|
description = "Tidy up my torrents";
|
||||||
|
wantedBy = [ "default.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
TimeoutStartSec = "5min";
|
||||||
|
ExecStart = "${qbit_manageEnv}/bin/python ${qbit_manage}/qbit_manage.py -r -c /home/jawz/.config/qbit_manage/config.yml";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
timers.qbit_manage = {
|
timers.qbit_manage = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ in
|
|||||||
image = "ghcr.io/ignisda/ryot:v10";
|
image = "ghcr.io/ignisda/ryot:v10";
|
||||||
ports = [ "${toString cfg.port}:8000" ];
|
ports = [ "${toString cfg.port}:8000" ];
|
||||||
environmentFiles = [ config.sops.secrets.ryot.path ];
|
environmentFiles = [ config.sops.secrets.ryot.path ];
|
||||||
|
volumes = [ "${config.my.postgresSocket}:${config.my.postgresSocket}" ];
|
||||||
environment = {
|
environment = {
|
||||||
RUST_LOG = "ryot=debug,sea_orm=debug";
|
RUST_LOG = "ryot=debug,sea_orm=debug";
|
||||||
TZ = config.my.timeZone;
|
TZ = config.my.timeZone;
|
||||||
DATABASE_URL = "postgres:///ryot?host=${config.my.postgresSocket}";
|
DATABASE_URL = "postgres:///ryot?host=${config.my.postgresSocket}";
|
||||||
FRONTEND_INSECURE_COOKIES = "true";
|
FRONTEND_INSECURE_COOKIES = "true";
|
||||||
};
|
};
|
||||||
volumes = [ "${config.my.postgresSocket}:${config.my.postgresSocket}" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,8 +28,12 @@ in
|
|||||||
config = lib.mkMerge [
|
config = lib.mkMerge [
|
||||||
(lib.mkIf (cfg.enable && config.my.secureHost) {
|
(lib.mkIf (cfg.enable && config.my.secureHost) {
|
||||||
my.servers = {
|
my.servers = {
|
||||||
synapse = { inherit domain; };
|
synapse = {
|
||||||
element = { inherit domain; };
|
inherit domain;
|
||||||
|
};
|
||||||
|
element = {
|
||||||
|
inherit domain;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
users.groups.matrix-synapse = { inherit gid; };
|
users.groups.matrix-synapse = { inherit gid; };
|
||||||
users.users.matrix-synapse = {
|
users.users.matrix-synapse = {
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ let
|
|||||||
version ? "git",
|
version ? "git",
|
||||||
}:
|
}:
|
||||||
pkgs.stdenvNoCC.mkDerivation {
|
pkgs.stdenvNoCC.mkDerivation {
|
||||||
name = "${libname}-${version}";
|
|
||||||
inherit src;
|
inherit src;
|
||||||
|
name = "${libname}-${version}";
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
runHook preInstall
|
runHook preInstall
|
||||||
mkdir -p "$out/lib/haxe/${withCommas libname}/${withCommas version}"
|
mkdir -p "$out/lib/haxe/${withCommas libname}/${withCommas version}"
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ in
|
|||||||
package = pkgs.vaultwarden;
|
package = pkgs.vaultwarden;
|
||||||
environmentFile = config.sops.secrets.vaultwarden.path;
|
environmentFile = config.sops.secrets.vaultwarden.path;
|
||||||
config = {
|
config = {
|
||||||
|
DOMAIN = cfg.url;
|
||||||
# ROCKET_ADDRESS = "${config.my.localhost}"; # VPS
|
# ROCKET_ADDRESS = "${config.my.localhost}"; # VPS
|
||||||
ROCKET_ADDRESS = cfg.ip;
|
ROCKET_ADDRESS = cfg.ip;
|
||||||
ROCKET_PORT = cfg.port;
|
ROCKET_PORT = cfg.port;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ in
|
|||||||
ports = [ "${toString cfg.port}:8000" ];
|
ports = [ "${toString cfg.port}:8000" ];
|
||||||
dependsOn = [ "yamtrack-redis" ];
|
dependsOn = [ "yamtrack-redis" ];
|
||||||
environmentFiles = [ config.sops.secrets.yamtrack.path ];
|
environmentFiles = [ config.sops.secrets.yamtrack.path ];
|
||||||
|
volumes = [ "${config.my.postgresSocket}:${config.my.postgresSocket}" ];
|
||||||
environment = {
|
environment = {
|
||||||
TZ = config.my.timeZone;
|
TZ = config.my.timeZone;
|
||||||
URLS = cfg.url;
|
URLS = cfg.url;
|
||||||
@@ -31,7 +32,6 @@ in
|
|||||||
REDIS_URL = "redis://yamtrack-redis:6379/0";
|
REDIS_URL = "redis://yamtrack-redis:6379/0";
|
||||||
SOCIAL_PROVIDERS = "allauth.socialaccount.providers.openid_connect";
|
SOCIAL_PROVIDERS = "allauth.socialaccount.providers.openid_connect";
|
||||||
};
|
};
|
||||||
volumes = [ "${config.my.postgresSocket}:${config.my.postgresSocket}" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,18 +38,6 @@ in
|
|||||||
"${config.my.localhost6}:53"
|
"${config.my.localhost6}:53"
|
||||||
]
|
]
|
||||||
++ lib.optionals config.my.services.wireguard.enable wgListenAddrs;
|
++ lib.optionals config.my.services.wireguard.enable wgListenAddrs;
|
||||||
query_log = {
|
|
||||||
file = "/var/lib/dnscrypt-proxy/query.log";
|
|
||||||
format = "tsv";
|
|
||||||
};
|
|
||||||
sources.public-resolvers = {
|
|
||||||
urls = [
|
|
||||||
"https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md"
|
|
||||||
"https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md"
|
|
||||||
];
|
|
||||||
cache_file = "/var/lib/dnscrypt-proxy2/public-resolvers.md";
|
|
||||||
minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3";
|
|
||||||
};
|
|
||||||
server_names = [
|
server_names = [
|
||||||
"adfilter-adl"
|
"adfilter-adl"
|
||||||
"adfilter-adl-ipv6"
|
"adfilter-adl-ipv6"
|
||||||
@@ -65,6 +53,18 @@ in
|
|||||||
"quad9-dnscrypt-ip6-filter-pri"
|
"quad9-dnscrypt-ip6-filter-pri"
|
||||||
"ibksturm"
|
"ibksturm"
|
||||||
];
|
];
|
||||||
|
query_log = {
|
||||||
|
file = "/var/lib/dnscrypt-proxy/query.log";
|
||||||
|
format = "tsv";
|
||||||
|
};
|
||||||
|
sources.public-resolvers = {
|
||||||
|
urls = [
|
||||||
|
"https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md"
|
||||||
|
"https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md"
|
||||||
|
];
|
||||||
|
cache_file = "/var/lib/dnscrypt-proxy2/public-resolvers.md";
|
||||||
|
minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -29,8 +29,10 @@
|
|||||||
open = config.networking.hostName == "workstation";
|
open = config.networking.hostName == "workstation";
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
powerManagement.enable = true;
|
powerManagement = {
|
||||||
powerManagement.finegrained = false;
|
enable = true;
|
||||||
|
finegrained = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,10 +11,12 @@
|
|||||||
security.rtkit.enable = true; # make pipewire realtime-capable
|
security.rtkit.enable = true; # make pipewire realtime-capable
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
enable = true;
|
enable = true;
|
||||||
alsa.enable = true;
|
|
||||||
alsa.support32Bit = true;
|
|
||||||
pulse.enable = true;
|
pulse.enable = true;
|
||||||
wireplumber.enable = true;
|
wireplumber.enable = true;
|
||||||
|
alsa = {
|
||||||
|
enable = true;
|
||||||
|
support32Bit = true;
|
||||||
|
};
|
||||||
# lowLatency = {
|
# lowLatency = {
|
||||||
# enable = true;
|
# enable = true;
|
||||||
# quantum = 64;
|
# quantum = 64;
|
||||||
|
|||||||
@@ -49,10 +49,6 @@ in
|
|||||||
relaysEnabled = false;
|
relaysEnabled = false;
|
||||||
globalAnnounceEnabled = false;
|
globalAnnounceEnabled = false;
|
||||||
};
|
};
|
||||||
gui = {
|
|
||||||
user = "jawz";
|
|
||||||
password = config.sops.secrets.syncthing_password.path;
|
|
||||||
};
|
|
||||||
devices =
|
devices =
|
||||||
let
|
let
|
||||||
mkWgDevice = name: id: {
|
mkWgDevice = name: id: {
|
||||||
@@ -75,6 +71,10 @@ in
|
|||||||
wg-friend4 = mkWgDevice "wg-friend4" "7YPUQ4Y-2UVEAXI-KBQVU7R-B6R5O36-GDQPTOY-3R3OG7H-BVWVOTD-EX52VQM";
|
wg-friend4 = mkWgDevice "wg-friend4" "7YPUQ4Y-2UVEAXI-KBQVU7R-B6R5O36-GDQPTOY-3R3OG7H-BVWVOTD-EX52VQM";
|
||||||
wg-friend6 = mkWgDevice "wg-friend6" "STQGYJV-YNFX6PB-NK63JBV-7HS74L4-AMF2QWA-KAFLXZA-3FELLSB-TE65ZQI";
|
wg-friend6 = mkWgDevice "wg-friend6" "STQGYJV-YNFX6PB-NK63JBV-7HS74L4-AMF2QWA-KAFLXZA-3FELLSB-TE65ZQI";
|
||||||
};
|
};
|
||||||
|
gui = {
|
||||||
|
user = "jawz";
|
||||||
|
password = config.sops.secrets.syncthing_password.path;
|
||||||
|
};
|
||||||
folders = {
|
folders = {
|
||||||
cache = mkMobile "~/Downloads/cache/";
|
cache = mkMobile "~/Downloads/cache/";
|
||||||
friends = mkMobile "~/Pictures/Artist/friends/";
|
friends = mkMobile "~/Pictures/Artist/friends/";
|
||||||
|
|||||||
@@ -11,9 +11,7 @@ let
|
|||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.my.websites.lidarrMbReport = {
|
options.my.websites.lidarrMbReport.enableProxy = lib.mkEnableOption "lidarr mb report static site";
|
||||||
enableProxy = lib.mkEnableOption "lidarr mb report static site";
|
|
||||||
};
|
|
||||||
config = lib.mkIf (cfg.enableProxy && config.my.enableProxy) {
|
config = lib.mkIf (cfg.enableProxy && config.my.enableProxy) {
|
||||||
services.nginx.virtualHosts."mb-report.lebubu.org" = {
|
services.nginx.virtualHosts."mb-report.lebubu.org" = {
|
||||||
forceSSL = true;
|
forceSSL = true;
|
||||||
|
|||||||
@@ -57,9 +57,7 @@ let
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.my.websites.portfolio = {
|
options.my.websites.portfolio.enableProxy = lib.mkEnableOption "portfolio and blog static sites";
|
||||||
enableProxy = lib.mkEnableOption "portfolio and blog static sites";
|
|
||||||
};
|
|
||||||
config = lib.mkIf (cfg.enableProxy && config.my.enableProxy) {
|
config = lib.mkIf (cfg.enableProxy && config.my.enableProxy) {
|
||||||
services.nginx.virtualHosts = {
|
services.nginx.virtualHosts = {
|
||||||
"www.danilo-reyes.com" = {
|
"www.danilo-reyes.com" = {
|
||||||
|
|||||||
@@ -259,15 +259,15 @@ in
|
|||||||
mkEnabledIp = ip: name: {
|
mkEnabledIp = ip: name: {
|
||||||
inherit name;
|
inherit name;
|
||||||
value = {
|
value = {
|
||||||
enable = true;
|
|
||||||
inherit ip;
|
inherit ip;
|
||||||
|
enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
mkEnabledProxyIp = ip: name: {
|
mkEnabledProxyIp = ip: name: {
|
||||||
inherit name;
|
inherit name;
|
||||||
value = {
|
value = {
|
||||||
enableProxy = true;
|
|
||||||
inherit ip;
|
inherit ip;
|
||||||
|
enableProxy = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
enableList = func: list: list |> map func |> builtins.listToAttrs;
|
enableList = func: list: list |> map func |> builtins.listToAttrs;
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{ inputs, ... }:
|
{ inputs, ... }:
|
||||||
{
|
{
|
||||||
flake = {
|
flake = {
|
||||||
|
homeConfigurations.mac = inputs.self.lib.createHomeConfig {
|
||||||
|
name = "mac";
|
||||||
|
system = "aarch64-darwin";
|
||||||
|
};
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
workstation = inputs.self.lib.createConfig "workstation" inputs.nixpkgs;
|
workstation = inputs.self.lib.createConfig "workstation" inputs.nixpkgs;
|
||||||
miniserver = inputs.self.lib.createConfig "miniserver" inputs.nixpkgs-small;
|
miniserver = inputs.self.lib.createConfig "miniserver" inputs.nixpkgs-small;
|
||||||
@@ -9,9 +13,5 @@
|
|||||||
emacs = inputs.self.lib.createConfig "emacs" inputs.nixpkgs;
|
emacs = inputs.self.lib.createConfig "emacs" inputs.nixpkgs;
|
||||||
vps = inputs.self.lib.createConfig "vps" inputs.nixpkgs-small;
|
vps = inputs.self.lib.createConfig "vps" inputs.nixpkgs-small;
|
||||||
};
|
};
|
||||||
homeConfigurations.mac = inputs.self.lib.createHomeConfig {
|
|
||||||
name = "mac";
|
|
||||||
system = "aarch64-darwin";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
perSystem =
|
perSystem =
|
||||||
{ system, pkgs, ... }:
|
{ system, pkgs, ... }:
|
||||||
let
|
let
|
||||||
|
portableEmacs = import ../modules/dev/emacs/portable.nix {
|
||||||
|
inherit inputs pkgs;
|
||||||
|
};
|
||||||
mcpServerPkg = pkgs.python3Packages.buildPythonPackage {
|
mcpServerPkg = pkgs.python3Packages.buildPythonPackage {
|
||||||
pname = "nixos-mcp-server";
|
pname = "nixos-mcp-server";
|
||||||
version = "0.1.0";
|
version = "0.1.0";
|
||||||
@@ -31,8 +34,10 @@
|
|||||||
(
|
(
|
||||||
{ lib, ... }:
|
{ lib, ... }:
|
||||||
{
|
{
|
||||||
my.secureHost = lib.mkForce false;
|
my = {
|
||||||
my.build.baseImage = true;
|
secureHost = lib.mkForce false;
|
||||||
|
build.baseImage = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
];
|
];
|
||||||
@@ -52,9 +57,11 @@
|
|||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
apps.doom-emacs = portableEmacs.app;
|
||||||
packages =
|
packages =
|
||||||
(inputs.jawz-scripts.packages.${system} or { })
|
(inputs.jawz-scripts.packages.${system} or { })
|
||||||
// {
|
// {
|
||||||
|
doom-emacs = portableEmacs.package;
|
||||||
mcp-tests = mcpTests;
|
mcp-tests = mcpTests;
|
||||||
nixos-mcp = nixosMcp;
|
nixos-mcp = nixosMcp;
|
||||||
nixos-mcp-server = mcpServerPkg;
|
nixos-mcp-server = mcpServerPkg;
|
||||||
|
|||||||
@@ -49,3 +49,8 @@
|
|||||||
- **Decision**: Add a standalone `homeConfigurations.mac` target backed by `hosts/mac/home.nix` and `hosts/mac/toggles.nix`, reusing workstation-style dev and shell modules while excluding Linux GUI app modules.
|
- **Decision**: Add a standalone `homeConfigurations.mac` target backed by `hosts/mac/home.nix` and `hosts/mac/toggles.nix`, reusing workstation-style dev and shell modules while excluding Linux GUI app modules.
|
||||||
- **Rationale**: Lets the repo model an upcoming macOS machine without forcing NixOS host semantics onto a Home Manager-only system.
|
- **Rationale**: Lets the repo model an upcoming macOS machine without forcing NixOS host semantics onto a Home Manager-only system.
|
||||||
- **Alternatives considered**: (a) Wait for the physical Mac and keep no target in the flake (rejected: delays validation and reuse work); (b) model the Mac as a fake NixOS host (rejected: does not match the intended deployment model).
|
- **Alternatives considered**: (a) Wait for the physical Mac and keep no target in the flake (rejected: delays validation and reuse work); (b) model the Mac as a fake NixOS host (rejected: does not match the intended deployment model).
|
||||||
|
|
||||||
|
## Decision 11 (2026-03-23): Canonical Nix nesting and ordering style
|
||||||
|
- **Decision**: Standardize Nix structure so single-child attribute sets are flattened into dotted attrpaths, siblings that share a parent are merged into one nested attribute set, simple leaf assignments appear before nested attribute sets, `inherit` statements appear first within a set, boolean leaves appear before other leaves, and module bodies place `options` before `config`.
|
||||||
|
- **Rationale**: This keeps modules scan-friendly, reduces unnecessary indentation, and makes the high-signal contract (`options`) appear before implementation (`config`) consistently across the repo.
|
||||||
|
- **Alternatives considered**: (a) Leave structure to formatter defaults only (rejected: formatters do not enforce these semantic grouping rules); (b) prefer fully flattened attrpaths everywhere (rejected: harms readability once a parent has multiple children); (c) keep `config` before `options` when it was written first (rejected: makes module interfaces harder to scan).
|
||||||
|
|||||||
Reference in New Issue
Block a user