Compare commits

...

30 Commits

Author SHA1 Message Date
Giulio De Pasquale
851024988c Merge remote-tracking branch 'origin/master' into nixos-21.11 2022-11-10 19:03:16 +01:00
Giulio De Pasquale
2771f6a782 helix: Do not show whitespaces. 2022-11-10 19:03:04 +01:00
Giulio De Pasquale
a747591ba9 Merge remote-tracking branch 'origin/master' into nixos-21.11 2022-11-10 19:01:00 +01:00
Giulio De Pasquale
d84d5c5611 helix: Changed theme to monokai_pro_spectrum 2022-11-10 19:00:49 +01:00
Giulio De Pasquale
1626fb71cf Merge remote-tracking branch 'origin/master' into nixos-21.11 2022-11-10 15:07:48 +01:00
Giulio De Pasquale
a552cbda8d helix: Force true-color. Added typescript package for LSP. Render whitespaces 2022-11-10 15:07:05 +01:00
Giulio De Pasquale
928a9a4456 minecraft: Switch to unstable 2022-11-10 10:59:09 +01:00
Giulio De Pasquale
54cf90be5f Merge remote-tracking branch 'origin/master' into nixos-21.11 2022-11-08 19:07:36 +01:00
Giulio De Pasquale
5607a36839 helix: Add texlab LSP. Additional config. 2022-11-08 19:07:21 +01:00
Giulio De Pasquale
381c96746b Merge remote-tracking branch 'origin/master' into nixos-21.11 2022-11-07 19:20:07 +01:00
Giulio De Pasquale
dbe6b5956f roles/home/common: replaced neovim with helix 2022-11-07 17:31:44 +01:00
Giulio De Pasquale
4bb5af4b5a nginx: Add check_role function to worker init 2022-10-28 22:01:07 +02:00
Giulio De Pasquale
2a7af4e910 openid: Check for role when authenticating 2022-10-28 22:00:29 +02:00
Giulio De Pasquale
09e3ef237b keycloak: Expose /admin endpoint. Use 127.0.0.1 instead of localhost to
avoid IPv6.
2022-10-28 18:35:43 +02:00
Giulio De Pasquale
60546992b2 keycloak: Only expose recommended endpoints. Redirect main page to account page. 2022-10-28 15:24:23 +02:00
Giulio De Pasquale
9180f31c3c deluge: Add ACME 2022-10-28 15:03:09 +02:00
Giulio De Pasquale
1be49e4835 deluge: Add OpenID auth 2022-10-28 14:59:17 +02:00
Giulio De Pasquale
35dbc4f40e nzbget: Add OpenID auth 2022-10-28 14:56:40 +02:00
Giulio De Pasquale
4975e3434f bazarr: Add OpenID auth 2022-10-28 14:56:25 +02:00
Giulio De Pasquale
7c3485f585 lidarr, sonarr: Added OpenID auth 2022-10-28 14:48:46 +02:00
Giulio De Pasquale
c9e46ec073 radarr: Use openid.nix template 2022-10-28 14:43:55 +02:00
Giulio De Pasquale
69ffff50e0 radarr: Setup OpenID auth 2022-10-28 14:35:43 +02:00
Giulio De Pasquale
c1a2c8238b nginx: Add additional plugins for OpenID to work 2022-10-28 14:35:22 +02:00
Giulio De Pasquale
dddc557b46 nginx: Use openresty package. Add openidc plugin. 2022-10-28 13:40:50 +02:00
Giulio De Pasquale
9a2c8886ed nextcloud: Updates to service 2022-10-28 13:32:49 +02:00
Giulio De Pasquale
a6f81150e7 keycloack: Add keycloack service 2022-10-28 13:32:31 +02:00
Giulio De Pasquale
2d135b743c neovim: Added shfmt 2022-10-24 10:00:39 +02:00
Giulio De Pasquale
cbd9541696 neovim: Added minimap plugin 2022-10-24 10:00:15 +02:00
Giulio De Pasquale
d83abddfcd neovim: Fixed typo in pumvisible() config 2022-10-21 21:26:11 +02:00
Giulio De Pasquale
e78349674e neovim: Moved nixfmt into extraPackages 2022-10-21 21:25:20 +02:00
14 changed files with 272 additions and 43 deletions

View File

@ -3,6 +3,7 @@
let
domain = "htbaz.giugl.io";
network = import ./network.nix;
auth_block = (import ./openid.nix).openresty_oidc_block;
in {
services = {
bazarr = {
@ -15,11 +16,12 @@ in {
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:6767";
extraConfig = ''
allow 10.0.0.0/24;
${lib.concatMapStrings (x: "allow ${x};") network.gdevices-wg}
deny all;
'';
extraConfig = auth_block {
realm = "master";
client_id = "bazarr";
client_secret = "OPn4Mmto2m3dDPji1cjPfHy9W55M9JFq";
redirect_uri = "https://${domain}";
};
};
};
};

View File

@ -3,6 +3,7 @@
let
domain = "htdel.giugl.io";
network = import ./network.nix;
auth_block = (import ./openid.nix).openresty_oidc_block;
in {
services = {
deluge = {
@ -32,13 +33,17 @@ in {
};
nginx.virtualHosts.${domain} = {
forceSSL = true;
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:8112";
extraConfig = ''
allow 10.0.0.0/24;
${lib.concatMapStrings (x: "allow ${x};") network.gdevices-wg}
deny all;
'';
extraConfig = auth_block {
realm = "master";
client_id = "deluge";
client_secret = "AGa1U9S1zkaM3TJVxtyx4Er76DBk1APR";
redirect_uri = "https://${domain}";
};
};
};
};

View File

@ -0,0 +1,78 @@
{ pkgs, config, ... }:
let
network = import ./network.nix;
domain = "auth.giugl.io";
in {
services = {
keycloak = {
enable = true;
initialAdminPassword = "giulio";
database.passwordFile = "/secrets/keycloak/database.key";
settings = {
hostname = domain;
proxy = "edge";
http-port = 6654;
https-port = 6655;
hostname-strict-backchannel = true;
};
};
postgresql = {
ensureDatabases =
[ "${toString config.services.keycloak.database.name}" ];
ensureUsers = [{
name = "${toString config.services.keycloak.database.username}";
ensurePermissions = {
"DATABASE ${toString config.services.keycloak.database.name}" =
"ALL PRIVILEGES";
};
}];
};
nginx.virtualHosts.${domain} = {
forceSSL = true;
enableACME = true;
locations = {
"/" = { return = "301 https://${domain}/realms/master/account"; };
"/admin" = {
proxyPass = "http://127.0.0.1:${
toString config.services.keycloak.settings.http-port
}";
};
"/js" = {
proxyPass = "http://127.0.0.1:${
toString config.services.keycloak.settings.http-port
}";
};
"/realms" = {
proxyPass = "http://127.0.0.1:${
toString config.services.keycloak.settings.http-port
}";
};
"/resources" = {
proxyPass = "http://127.0.0.1:${
toString config.services.keycloak.settings.http-port
}";
};
"/robots.txt" = {
proxyPass = "http://127.0.0.1:${
toString config.services.keycloak.settings.http-port
}";
};
};
};
};
networking.extraHosts = ''
${network.architect-lan} ${domain}
${network.architect-wg} ${domain}
'';
}

View File

@ -3,6 +3,7 @@
let
domain = "htlid.giugl.io";
network = import ./network.nix;
auth_block = (import ./openid.nix).openresty_oidc_block;
in {
services = {
lidarr = {
@ -15,12 +16,12 @@ in {
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:8686";
extraConfig = ''
allow 10.0.0.0/24;
${lib.concatMapStrings (x: "allow ${x};") network.gdevices-wg}
deny all;
deny 10.0.0.1;
'';
extraConfig = auth_block {
realm = "master";
client_id = "lidarr";
client_secret = "7s4dd1SEi84F4fUFsqRaQmSSucZhyTco";
redirect_uri = "https://${domain}";
};
};
};
};

View File

@ -3,11 +3,13 @@
let
domain = "minecraft.giugl.io";
network = import ./network.nix;
in {
in
{
services.minecraft-server = {
enable = true;
eula = true;
declarative = true;
package = pkgs.unstable.minecraft-server;
serverProperties = { motd = "Welcome on the RuNas server!"; };
};

View File

@ -3,24 +3,34 @@
let
domain = "cloud.giugl.io";
network = import ./network.nix;
redis_port = 6379;
in {
services = {
mysql.enable = true;
mysql.package = pkgs.unstable.mysql80;
mysql = {
enable = true;
package = pkgs.unstable.mysql80;
};
redis.servers."default".enable = true;
redis = {
vmOverCommit = true;
servers."nextcloud" = {
enable = true;
port = redis_port;
};
};
nextcloud = {
enable = true;
hostName = "${domain}";
hostName = domain;
https = true;
package = pkgs.unstable.nextcloud24;
caching.redis = true;
caching = {
redis = true;
};
autoUpdateApps.enable = true;
autoUpdateApps.startAt = "05:00:00";
logLevel = 1;
config = {
overwriteProtocol = "https";

View File

@ -1,8 +1,9 @@
{ services, ... }:
{ services, pkgs, lib, ... }:
{
services.nginx = {
enable = true;
package = pkgs.openresty;
recommendedGzipSettings = true;
recommendedOptimisation = true;
recommendedProxySettings = true;
@ -25,6 +26,45 @@
"/wat.jpg" = { };
};
};
appendHttpConfig = let
extraPureLuaPackages = with pkgs.luajitPackages; [
lua-resty-openidc
lua-resty-http
lua-resty-session
lua-resty-jwt
lua-resty-openssl
];
luaPath = pkg: "${pkg}/share/lua/5.1/?.lua";
makeLuaPath = lib.concatMapStringsSep ";" luaPath;
in ''
lua_package_path '${makeLuaPath extraPureLuaPackages};;';
lua_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
lua_ssl_verify_depth 5;
# cache for OIDC discovery metadata
lua_shared_dict discovery 1m;
lua_shared_dict jwks 1m;
# https://github.com/openresty/lua-resty-redis/issues/159
resolver local=on ipv6=off;
init_worker_by_lua_block {
function check_role (res, role)
if res.user.roles == nil then
return false
end
for _,v in pairs(res.user.roles) do
if string.lower(v) == role then
return true
end
end
return false
end
}
'';
appendConfig = ''
worker_processes 24;
'';

View File

@ -3,6 +3,7 @@
let
domain = "htnzb.giugl.io";
network = import ./network.nix;
auth_block = (import ./openid.nix).openresty_oidc_block;
in {
services = {
nzbget = {
@ -15,11 +16,12 @@ in {
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:6789";
extraConfig = ''
allow 10.0.0.0/24;
${lib.concatMapStrings (x: "allow ${x};") network.gdevices-wg}
deny all;
'';
extraConfig = auth_block {
realm = "master";
client_id = "nzbget";
client_secret = "tkjzdqnUoWTlGUYah5tgMqVPFMlOUvk9";
redirect_uri = "https://${domain}";
};
};
};
};

View File

@ -0,0 +1,37 @@
{ lib }:
{
openresty_oidc_block =
{ realm, client_id, client_secret, redirect_uri, access_role ? "" }: ''
access_by_lua_block {
local opts = {
discovery = "https://auth.giugl.io/realms/${realm}/.well-known/openid-configuration",
client_id = "${client_id}",
client_secret = "${client_secret}",
logout_path = "/logout",
redirect_after_logout_uri = "/",
redirect_uri = "/redirect_uri",
keepalive = "yes",
accept_none_alg = true
}
-- call introspect for OAuth 2.0 Bearer Access Token validation
local res, err = require("resty.openidc").authenticate(opts)
if err then
ngx.status = 403
ngx.say(err)
ngx.exit(ngx.HTTP_FORBIDDEN)
end
${lib.optionalString (access_role != "") ''
if not check_role(res, "${access_role}") then
ngx.status = 401
ngx.header.content_type = 'text/html';
ngx.say("You are not authorized to access this page. Please contact Er Pepotto.")
ngx.exit(ngx.HTTP_UNAUTHORIZED)
end
''}
}
'';
}

View File

@ -3,6 +3,7 @@
let
domain = "htrad.giugl.io";
network = import ./network.nix;
auth_block = (import ./openid.nix).openresty_oidc_block;
in {
services = {
radarr = {
@ -15,11 +16,12 @@ in {
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:7878";
extraConfig = ''
allow 10.0.0.0/24;
${lib.concatMapStrings (x: "allow ${x};") network.gdevices-wg}
deny all;
'';
extraConfig = auth_block {
realm = "master";
client_id = "radarr";
client_secret = "DCoeN4PwqGrAoG6Mqw73orrUjojJ1fmn";
redirect_uri = "https://${domain}";
};
};
};
};

View File

@ -3,6 +3,7 @@
let
domain = "htson.giugl.io";
network = import ./network.nix;
auth_block = (import ./openid.nix).openresty_oidc_block;
in {
services = {
sonarr = {
@ -15,11 +16,12 @@ in {
enableACME = true;
locations."/" = {
proxyPass = "http://localhost:8989";
extraConfig = ''
allow 10.0.0.0/24;
${lib.concatMapStrings (x: "allow ${x};") network.gdevices-wg}
deny all;
'';
extraConfig = auth_block {
realm = "master";
client_id = "sonarr";
client_secret = "d36ehMSPCI3xLfOGNcnSUKZWQblyGumi";
redirect_uri = "https://${domain}";
};
};
};
};

View File

@ -1,7 +1,7 @@
{ config, pkgs, ... }:
{
imports = [ ./zsh.nix ./git.nix ./neovim.nix ];
imports = [ ./zsh.nix ./git.nix ./helix.nix ];
home = { packages = with pkgs; [ rizin sshfs victor-mono home-manager ]; };
}

39
roles/home/helix.nix Normal file
View File

@ -0,0 +1,39 @@
{ config, pkgs, ... }:
{
home = {
sessionVariables = {
EDITOR = "hx";
VISUAL = "hx";
};
file.".config/helix/config.toml".text = ''
theme = "monokai_pro_spectrum"
[editor]
cursorline = true
true-color = true
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[editor.lsp]
display-messages = true
[editor.indent-guides]
render = true
'';
packages = with pkgs.unstable; [
helix
clang-tools
rust-analyzer
rnix-lsp
python310Packages.python-lsp-server
texlab
nodePackages.typescript
];
};
}

View File

@ -20,6 +20,8 @@
cmake-format
clang-tools
rustfmt
nixfmt
shfmt
];
plugins = with pkgs.vimPlugins; [
vim-nix
@ -38,6 +40,8 @@
cmp-nvim-lsp
(nvim-treesitter.withPlugins (_: pkgs.tree-sitter.allGrammars))
nvim-treesitter-textobjects
minimap-vim
pkgs.vimExtraPlugins.leap-nvim
];
@ -53,7 +57,7 @@
set wildmode=longest:full,full
" remapping popup menu (command autocompletion)
cnoremap <expr> <up> pumvisible() ? "<C-p>" : "<up>
cnoremap <expr> <up> pumvisible() ? "<C-p>" : "<up>"
cnoremap <expr> <down> pumvisible() ? "<C-n>" : "<down>"
cnoremap <expr> <CR> pumvisible() ? "<C-e>":"<CR>"
@ -80,6 +84,11 @@
" Enable trimmming of trailing whitespace
let g:neoformat_basic_format_trim = 1
" Config minimap
let g:minimap_width = 10
let g:minimap_auto_start = 1
let g:minimap_auto_start_win_enter = 1
lua << EOF
-- Setup leap-nvim keymappings