Compare commits
No commits in common. "435f1b3aa15e7f4de322084c0225972626b928b3" and "ca25688c2cab2e32d9288e5b5ae96fb41df32b9d" have entirely different histories.
435f1b3aa1
...
ca25688c2c
37 changed files with 385 additions and 71 deletions
|
@ -1,5 +1,8 @@
|
||||||
{ lib, ... }: {
|
{ inputs
|
||||||
|
, config
|
||||||
|
, lib
|
||||||
|
, ...
|
||||||
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
./shell
|
./shell
|
||||||
./programs
|
./programs
|
||||||
|
|
|
@ -23,6 +23,8 @@ in
|
||||||
ll = "${pkgs.eza}/bin/eza --long --all --group --header";
|
ll = "${pkgs.eza}/bin/eza --long --all --group --header";
|
||||||
tm = "tmux attach -t (basename $PWD) || tmux new -s (basename $PWD)";
|
tm = "tmux attach -t (basename $PWD) || tmux new -s (basename $PWD)";
|
||||||
x = "exit";
|
x = "exit";
|
||||||
|
# lazydocker --> lazypodman
|
||||||
|
lazypodman="sudo DOCKER_HOST=unix:///run/podman/podman.sock lazydocker";
|
||||||
};
|
};
|
||||||
|
|
||||||
shellAbbrs = {
|
shellAbbrs = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ lib, ... }:
|
{ inputs, lib, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
rec {
|
rec {
|
||||||
|
@ -12,6 +12,9 @@ rec {
|
||||||
user = existsOrDefault "user" options "568";
|
user = existsOrDefault "user" options "568";
|
||||||
group = existsOrDefault "group" options "568";
|
group = existsOrDefault "group" options "568";
|
||||||
|
|
||||||
|
subdomain = existsOrDefault "subdomainOverride" options options.app;
|
||||||
|
host = existsOrDefault "host" options "${subdomain}.${options.domain}";
|
||||||
|
|
||||||
enableBackups = (lib.attrsets.hasAttrByPath [ "persistence" "folder" ] options)
|
enableBackups = (lib.attrsets.hasAttrByPath [ "persistence" "folder" ] options)
|
||||||
&& (lib.attrsets.attrByPath [ "persistence" "enable" ] true options);
|
&& (lib.attrsets.attrByPath [ "persistence" "enable" ] true options);
|
||||||
# nix doesnt have an exhausive list of options for oci
|
# nix doesnt have an exhausive list of options for oci
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
## Modules
|
## Modules
|
||||||
|
|
||||||
A set of 'custom' modules with the aim to enable easy on/off/settings to build up a system modularly to my 'specs'.
|
A set of 'custom' modules with the aim to enable easy on/off/settings to build up a system modulary to my 'specs'.
|
||||||
|
|
||||||
The main goal is to build up a `mySystem` options key which is easy to read and toggle functionality on and off.
|
The main goal is to build up a `mySystem` options key which is easy to read and toggle functionality on and off.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./gnome.nix
|
./gnome.nix
|
||||||
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.de.gnome;
|
cfg = config.mySystem.de.gnome;
|
||||||
|
@ -8,6 +13,7 @@ in
|
||||||
options.mySystem.de.gnome.systrayicons = mkEnableOption "Enable systray icons" // { default = true; };
|
options.mySystem.de.gnome.systrayicons = mkEnableOption "Enable systray icons" // { default = true; };
|
||||||
options.mySystem.de.gnome.gsconnect = mkEnableOption "Enable gsconnect (KDEConnect for GNOME)" // { default = true; };
|
options.mySystem.de.gnome.gsconnect = mkEnableOption "Enable gsconnect (KDEConnect for GNOME)" // { default = true; };
|
||||||
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
# Ref: https://nixos.wiki/wiki/GNOME
|
# Ref: https://nixos.wiki/wiki/GNOME
|
||||||
|
@ -32,12 +38,17 @@ in
|
||||||
# GNOME
|
# GNOME
|
||||||
gnome.enable = true;
|
gnome.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
udev.packages = optionals cfg.systrayicons [ pkgs.gnome.gnome-settings-daemon ]; # support appindicator
|
udev.packages = optionals cfg.systrayicons [ pkgs.gnome.gnome-settings-daemon ]; # support appindicator
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# systyray icons
|
# systyray icons
|
||||||
|
|
||||||
|
|
||||||
# extra pkgs and extensions
|
# extra pkgs and extensions
|
||||||
environment = {
|
environment = {
|
||||||
systemPackages = with pkgs; [
|
systemPackages = with pkgs; [
|
||||||
|
@ -51,7 +62,9 @@ in
|
||||||
# dont forget to enable them per-user in dconf settings -> "org/gnome/shell"
|
# dont forget to enable them per-user in dconf settings -> "org/gnome/shell"
|
||||||
gnomeExtensions.vitals
|
gnomeExtensions.vitals
|
||||||
gnomeExtensions.caffeine
|
gnomeExtensions.caffeine
|
||||||
|
gnomeExtensions.spotify-tray
|
||||||
gnomeExtensions.dash-to-dock
|
gnomeExtensions.dash-to-dock
|
||||||
|
|
||||||
]
|
]
|
||||||
++ optionals cfg.systrayicons [ pkgs.gnomeExtensions.appindicator ];
|
++ optionals cfg.systrayicons [ pkgs.gnomeExtensions.appindicator ];
|
||||||
};
|
};
|
||||||
|
@ -76,9 +89,21 @@ in
|
||||||
systemd.services."getty@tty1".enable = false;
|
systemd.services."getty@tty1".enable = false;
|
||||||
systemd.services."autovt@tty1".enable = false;
|
systemd.services."autovt@tty1".enable = false;
|
||||||
|
|
||||||
|
# TODO tidy this
|
||||||
|
# port forward for GNOME when using RDP***REMOVED***
|
||||||
|
|
||||||
|
# for RDP TODO make this a flag if RDP is enabled per host
|
||||||
|
networking.firewall.allowedTCPPorts = [
|
||||||
|
3389
|
||||||
|
];
|
||||||
|
|
||||||
# And dconf
|
# And dconf
|
||||||
programs.dconf.enable = true;
|
programs.dconf.enable = true;
|
||||||
|
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/114514
|
||||||
|
# dconf write /org/gnome/mutter/experimental-features "['scale-monitor-framebuffer']" TODO hack for GNOME 45
|
||||||
|
|
||||||
|
|
||||||
# Exclude default GNOME packages that dont interest me.
|
# Exclude default GNOME packages that dont interest me.
|
||||||
environment.gnome.excludePackages =
|
environment.gnome.excludePackages =
|
||||||
(with pkgs; [
|
(with pkgs; [
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, self
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.shell.fish;
|
cfg = config.mySystem.shell.fish;
|
||||||
|
|
|
@ -1,7 +1,17 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.security.acme;
|
cfg = config.mySystem.security.acme;
|
||||||
|
app = "acme";
|
||||||
|
appFolder = "/var/lib/${app}";
|
||||||
|
# persistentFolder = "${config.mySystem.persistentFolder}/var/lib/${appFolder}";
|
||||||
|
user = app;
|
||||||
|
group = app;
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.mySystem.security.acme.enable = mkEnableOption "acme";
|
options.mySystem.security.acme.enable = mkEnableOption "acme";
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
{ ... }:
|
{ lib, config, ... }:
|
||||||
|
with lib;
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./acme
|
./acme
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.cockpit;
|
cfg = config.mySystem.services.cockpit;
|
||||||
|
|
|
@ -3,7 +3,9 @@
|
||||||
./cockpit
|
./cockpit
|
||||||
./forgejo
|
./forgejo
|
||||||
./glances
|
./glances
|
||||||
|
./grafana
|
||||||
./monitoring.nix
|
./monitoring.nix
|
||||||
|
./nfs
|
||||||
./nginx
|
./nginx
|
||||||
./nix-serve
|
./nix-serve
|
||||||
./podman
|
./podman
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
{ lib, config, ... }:
|
{ lib, pkgs, config, ... }:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.forgejo;
|
cfg = config.mySystem.services.forgejo;
|
||||||
|
app = "forgejo";
|
||||||
|
port = 443;
|
||||||
http_port = 3000;
|
http_port = 3000;
|
||||||
serviceUser = "forgejo";
|
serviceUser = "forgejo";
|
||||||
domain = "git.hsn.dev";
|
domain = "git.hsn.dev";
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ pkgs, config, lib, ... }:
|
{ pkgs
|
||||||
|
, config
|
||||||
|
, lib
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.glances;
|
cfg = config.mySystem.services.glances;
|
||||||
app = "Glances";
|
app = "Glances";
|
||||||
|
@ -13,7 +17,16 @@ with lib;
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
description = "Enable gatus monitoring";
|
description = "Enable gatus monitoring";
|
||||||
default = true;
|
default = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
addToHomepage = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Add to homepage";
|
||||||
|
default = true;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
@ -33,6 +46,7 @@ with lib;
|
||||||
firewall.allowedTCPPorts = [ 61208 ];
|
firewall.allowedTCPPorts = [ 61208 ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
environment.etc."glances/glances.conf" = {
|
environment.etc."glances/glances.conf" = {
|
||||||
text = ''
|
text = ''
|
||||||
[global]
|
[global]
|
||||||
|
|
108
nixos/modules/nixos/services/grafana/default.nix
Normal file
108
nixos/modules/nixos/services/grafana/default.nix
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.mySystem.services.grafana;
|
||||||
|
app = "grafana";
|
||||||
|
category = "services";
|
||||||
|
description = "Metric visualisation";
|
||||||
|
user = app; #string
|
||||||
|
group = app; #string
|
||||||
|
port = 2342; #int
|
||||||
|
appFolder = "/var/lib/${app}";
|
||||||
|
# persistentFolder = "${config.mySystem.persistentFolder}/var/lib/${appFolder}";
|
||||||
|
host = "${app}" + (if cfg.dev then "-dev" else "");
|
||||||
|
url = "${host}.${config.networking.domain}";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.mySystem.${category}.${app} =
|
||||||
|
{
|
||||||
|
enable = mkEnableOption "${app}";
|
||||||
|
addToHomepage = mkEnableOption "Add ${app} to homepage" // { default = true; };
|
||||||
|
monitor = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enable gatus monitoring";
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
addToDNS = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Add to DNS list";
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
dev = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Development instance";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
backups = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enable local backups";
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
|
users.users.jahanson.extraGroups = [ group ];
|
||||||
|
|
||||||
|
## service
|
||||||
|
services.grafana = {
|
||||||
|
inherit port;
|
||||||
|
enable = true;
|
||||||
|
domain = host;
|
||||||
|
addr = "127.0.0.1";
|
||||||
|
};
|
||||||
|
|
||||||
|
### gatus integration
|
||||||
|
mySystem.services.gatus.monitors = mkIf cfg.monitor [
|
||||||
|
{
|
||||||
|
name = app;
|
||||||
|
group = "${category}";
|
||||||
|
url = "https://${url}";
|
||||||
|
interval = "1m";
|
||||||
|
conditions = [ "[CONNECTED] == true" "[STATUS] == 200" "[RESPONSE_TIME] < 50" ];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
### Ingress
|
||||||
|
services.nginx.virtualHosts.${url} = {
|
||||||
|
useACMEHost = config.networking.domain;
|
||||||
|
forceSSL = true;
|
||||||
|
locations."^~ /" = {
|
||||||
|
proxyPass = "http://127.0.0.1:${builtins.toString port}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
### firewall config
|
||||||
|
|
||||||
|
# networking.firewall = mkIf cfg.openFirewall {
|
||||||
|
# allowedTCPPorts = [ port ];
|
||||||
|
# allowedUDPPorts = [ port ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
### backups
|
||||||
|
warnings = [
|
||||||
|
(mkIf (!cfg.backups && config.mySystem.purpose != "Development")
|
||||||
|
"WARNING: Local backups for ${app} are disabled!")
|
||||||
|
];
|
||||||
|
|
||||||
|
services.restic.backups = config.lib.mySystem.mkRestic
|
||||||
|
{
|
||||||
|
inherit app user;
|
||||||
|
paths = [ appFolder ];
|
||||||
|
inherit appFolder;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, self
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.promMonitoring;
|
cfg = config.mySystem.services.promMonitoring;
|
||||||
|
@ -26,6 +30,8 @@ in
|
||||||
smartctl = {
|
smartctl = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# ensure ports are open
|
# ensure ports are open
|
||||||
|
|
48
nixos/modules/nixos/services/nfs/default.nix
Normal file
48
nixos/modules/nixos/services/nfs/default.nix
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.mySystem.nfs.nas;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.mySystem.nfs.nas = {
|
||||||
|
enable = mkEnableOption "Mount NAS";
|
||||||
|
lazy = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Enable lazymount";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable
|
||||||
|
{
|
||||||
|
services.rpcbind.enable = true; # needed for NFS
|
||||||
|
environment.systemPackages = with pkgs; [ nfs-utils ];
|
||||||
|
|
||||||
|
systemd.mounts = lib.mkIf cfg.lazy [{
|
||||||
|
type = "nfs";
|
||||||
|
mountConfig = {
|
||||||
|
Options = "noatime";
|
||||||
|
};
|
||||||
|
what = "${config.mySystem.nasAddress}:/tank";
|
||||||
|
where = "/mnt/nas";
|
||||||
|
}];
|
||||||
|
|
||||||
|
systemd.automounts = lib.mkIf cfg.lazy [{
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
automountConfig = {
|
||||||
|
TimeoutIdleSec = "600";
|
||||||
|
};
|
||||||
|
where = "/mnt/nas";
|
||||||
|
}];
|
||||||
|
|
||||||
|
fileSystems."${config.mySystem.nasFolder}" = lib.mkIf (!cfg.lazy) {
|
||||||
|
device = "${config.mySystem.nasAddress}:/tank";
|
||||||
|
fsType = "nfs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.nginx;
|
cfg = config.mySystem.services.nginx;
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.nix-serve;
|
cfg = config.mySystem.services.nix-serve;
|
||||||
|
@ -9,8 +13,10 @@ in
|
||||||
# enable nix serve binary cache
|
# enable nix serve binary cache
|
||||||
# you can test its working with `nix store ping --store http://10.8.20.33:5000`
|
# you can test its working with `nix store ping --store http://10.8.20.33:5000`
|
||||||
config.services.nix-serve = mkIf cfg.enable {
|
config.services.nix-serve = mkIf cfg.enable {
|
||||||
|
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.nix-serve-ng;
|
package = pkgs.nix-serve-ng;
|
||||||
openFirewall = true;
|
openFirewall = true;
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.podman;
|
cfg = config.mySystem.services.podman;
|
||||||
|
@ -29,14 +34,8 @@ in
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
podman-tui # status of containers in the terminal
|
podman-tui # status of containers in the terminal
|
||||||
lazydocker
|
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.fish.shellAliases = {
|
|
||||||
# lazydocker --> lazypodman
|
|
||||||
lazypodman="sudo DOCKER_HOST=unix:///run/podman/podman.sock lazydocker";
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.firewall.interfaces.podman0.allowedUDPPorts = [ 53 ];
|
networking.firewall.interfaces.podman0.allowedUDPPorts = [ 53 ];
|
||||||
|
|
||||||
# extra user for containers
|
# extra user for containers
|
||||||
|
|
|
@ -1,9 +1,15 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.${category}.${app};
|
cfg = config.mySystem.${category}.${app};
|
||||||
app = "postgresql";
|
app = "postgresql";
|
||||||
category = "services";
|
category = "services";
|
||||||
|
description = "Postgres RDMS";
|
||||||
|
appFolder = "/var/lib/${app}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.mySystem.${category}.${app} =
|
options.mySystem.${category}.${app} =
|
||||||
|
@ -15,13 +21,6 @@ in
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
description = "Enable prometheus scraping";
|
description = "Enable prometheus scraping";
|
||||||
default = true;
|
default = true;
|
||||||
|
|
||||||
};
|
|
||||||
backupLocation = mkOption
|
|
||||||
{
|
|
||||||
type = lib.types.string;
|
|
||||||
description = "Location for sql backups to be stored.";
|
|
||||||
default = "/persist/backup/postgresql";
|
|
||||||
};
|
};
|
||||||
backup = mkOption
|
backup = mkOption
|
||||||
{
|
{
|
||||||
|
@ -29,6 +28,7 @@ in
|
||||||
description = "Enable backups";
|
description = "Enable backups";
|
||||||
default = true;
|
default = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
@ -55,7 +55,7 @@ in
|
||||||
# enable backups
|
# enable backups
|
||||||
services.postgresqlBackup = mkIf cfg.backup {
|
services.postgresqlBackup = mkIf cfg.backup {
|
||||||
enable = lib.mkForce true;
|
enable = lib.mkForce true;
|
||||||
location = cfg.backupLocation;
|
location = "${config.mySystem.nasFolder}/backup/nixos/postgresql";
|
||||||
};
|
};
|
||||||
|
|
||||||
### firewall config
|
### firewall config
|
||||||
|
|
|
@ -1,14 +1,20 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.${category}.${app};
|
cfg = config.mySystem.${category}.${app};
|
||||||
app = "radicale";
|
app = "radicale";
|
||||||
category = "services";
|
category = "services";
|
||||||
|
description = "Contact/Calendar managment";
|
||||||
user = app; #string
|
user = app; #string
|
||||||
group = app; #string
|
group = app; #string
|
||||||
port = 5232; #int
|
port = 5232; #int
|
||||||
appFolder = "/var/lib/${app}";
|
appFolder = "/var/lib/${app}";
|
||||||
url = "${app}.jahanson.tech";
|
host = "${app}" + (if cfg.dev then "-dev" else "");
|
||||||
|
url = "${host}.${config.networking.domain}";
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.mySystem.${category}.${app} =
|
options.mySystem.${category}.${app} =
|
||||||
|
@ -27,12 +33,26 @@ in
|
||||||
description = "Enable prometheus scraping";
|
description = "Enable prometheus scraping";
|
||||||
default = true;
|
default = true;
|
||||||
};
|
};
|
||||||
|
addToDNS = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Add to DNS list";
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
dev = mkOption
|
||||||
|
{
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Development instance";
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
backups = mkOption
|
backups = mkOption
|
||||||
{
|
{
|
||||||
type = lib.types.bool;
|
type = lib.types.bool;
|
||||||
description = "Enable local backups";
|
description = "Enable local backups";
|
||||||
default = true;
|
default = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
@ -63,7 +83,8 @@ in
|
||||||
htpasswd_encryption = "plain";
|
htpasswd_encryption = "plain";
|
||||||
realm = "Radicale - Password Required";
|
realm = "Radicale - Password Required";
|
||||||
};
|
};
|
||||||
storage.filesystem_folder = "/var/lib/radicale/collections";
|
storage.filesystem_folder = "/var/lib/radicale/collections"; # TODO impermance/move?
|
||||||
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -105,6 +126,9 @@ in
|
||||||
inherit app user;
|
inherit app user;
|
||||||
paths = [ appFolder ];
|
paths = [ appFolder ];
|
||||||
inherit appFolder;
|
inherit appFolder;
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, self
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.rebootRequiredCheck;
|
cfg = config.mySystem.services.rebootRequiredCheck;
|
||||||
|
@ -7,6 +11,7 @@ in
|
||||||
options.mySystem.services.rebootRequiredCheck.enable = mkEnableOption "Reboot required check";
|
options.mySystem.services.rebootRequiredCheck.enable = mkEnableOption "Reboot required check";
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
|
||||||
# Enable timer
|
# Enable timer
|
||||||
systemd.timers."reboot-required-check" = {
|
systemd.timers."reboot-required-check" = {
|
||||||
wantedBy = [ "timers.target" ];
|
wantedBy = [ "timers.target" ];
|
||||||
|
@ -41,5 +46,9 @@ in
|
||||||
User = "root";
|
User = "root";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.system.resticBackup;
|
cfg = config.mySystem.system.resticBackup;
|
||||||
|
@ -29,6 +33,7 @@ in
|
||||||
description = "Location for snapshot mount";
|
description = "Location for snapshot mount";
|
||||||
default = "/mnt/nightly_backup";
|
default = "/mnt/nightly_backup";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
config = {
|
config = {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.system.impermanence;
|
cfg = config.mySystem.system.impermanence;
|
||||||
in
|
in
|
||||||
|
|
|
@ -53,9 +53,8 @@ let
|
||||||
zpool list -Ho name,cap,size | awk '{ printf("%-10s%+3s used out of %+5s\n", $1, $2, $3); }' | sed -e 's/^/ /'
|
zpool list -Ho name,cap,size | awk '{ printf("%-10s%+3s used out of %+5s\n", $1, $2, $3); }' | sed -e 's/^/ /'
|
||||||
fi
|
fi
|
||||||
printf "\n"
|
printf "\n"
|
||||||
|
|
||||||
if [[ -n "$service_status" ]]; then
|
|
||||||
printf "$BOLDService status$ENDCOLOR\n"
|
printf "$BOLDService status$ENDCOLOR\n"
|
||||||
|
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
if [[ $line =~ ".scope" ]]; then
|
if [[ $line =~ ".scope" ]]; then
|
||||||
continue
|
continue
|
||||||
|
@ -70,7 +69,6 @@ let
|
||||||
echo "service status unknown"
|
echo "service status unknown"
|
||||||
fi
|
fi
|
||||||
done <<< "$service_status"
|
done <<< "$service_status"
|
||||||
fi
|
|
||||||
'';
|
'';
|
||||||
cfg = config.mySystem.system.motd;
|
cfg = config.mySystem.system.motd;
|
||||||
in
|
in
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, self
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.nix;
|
cfg = config.mySystem.nix;
|
||||||
|
@ -23,6 +27,7 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config.nix = {
|
config.nix = {
|
||||||
optimise.automatic = cfg.autoOptimiseStore;
|
optimise.automatic = cfg.autoOptimiseStore;
|
||||||
# automatically garbage collect nix store
|
# automatically garbage collect nix store
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, self
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.services.openssh;
|
cfg = config.mySystem.services.openssh;
|
||||||
|
@ -19,6 +23,7 @@ in
|
||||||
default = "no";
|
default = "no";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
services.openssh = {
|
services.openssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
@ -8,7 +8,7 @@ let
|
||||||
cfg = config.mySystem.system.systemd.pushover-alerts;
|
cfg = config.mySystem.system.systemd.pushover-alerts;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.mySystem.system.systemd.pushover-alerts.enable = mkEnableOption "Pushover alerts for systemd failures" // { default = true; };
|
options.mySystem.system.systemd.pushover-alerts.enable = mkEnableOption "Pushover alers for systemd failures" // { default = true; };
|
||||||
options.systemd.services = mkOption {
|
options.systemd.services = mkOption {
|
||||||
type = with types; attrsOf (
|
type = with types; attrsOf (
|
||||||
submodule {
|
submodule {
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.security;
|
cfg = config.mySystem.security;
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, self
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
with lib;
|
with lib;
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.system;
|
cfg = config.mySystem.system;
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
{ lib, config, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.time;
|
cfg = config.mySystem.time;
|
||||||
in
|
in
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{ lib, config, pkgs, ... }:
|
{ lib
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.mySystem.system.zfs;
|
cfg = config.mySystem.system.zfs;
|
||||||
in
|
in
|
||||||
|
@ -36,5 +40,6 @@ with lib;
|
||||||
ZED_PUSHOVER_TOKEN = "$(${pkgs.busybox}/bin/cat ${config.sops.secrets.pushover-api-key.path})";
|
ZED_PUSHOVER_TOKEN = "$(${pkgs.busybox}/bin/cat ${config.sops.secrets.pushover-api-key.path})";
|
||||||
ZED_PUSHOVER_USER = "$(${pkgs.busybox}/bin/cat ${config.sops.secrets.pushover-user-key.path})";
|
ZED_PUSHOVER_USER = "$(${pkgs.busybox}/bin/cat ${config.sops.secrets.pushover-user-key.path})";
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
{ config, lib, pkgs, imports, modulesPath, ... }:
|
||||||
|
|
||||||
with lib;
|
with lib;
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,4 +5,5 @@
|
||||||
./system.nix
|
./system.nix
|
||||||
./users.nix
|
./users.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ ... }:
|
{ config, ... }:
|
||||||
{
|
{
|
||||||
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
||||||
# Secret for machine-specific pushover
|
# Secret for machine-specific pushover
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{ lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
with lib;
|
||||||
{
|
{
|
||||||
system = {
|
system = {
|
||||||
# Enable printing changes on nix build etc with nvd
|
# Enable printing changes on nix build etc with nvd
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, imports, boot, self, inputs, ... }:
|
||||||
# Role for workstations
|
# Role for workstations
|
||||||
# Covers desktops/laptops, expected to have a GUI and do workloads
|
# Covers desktops/laptops, expected to have a GUI and do workloads
|
||||||
# Will have home-manager installs
|
# Will have home-manager installs
|
||||||
|
|
||||||
with config;
|
with config;
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
mySystem = {
|
mySystem = {
|
||||||
|
|
||||||
de.gnome.enable = true;
|
de.gnome.enable = true;
|
||||||
|
@ -13,20 +15,20 @@ with config;
|
||||||
# TODO decide if i drop to bash on pis?
|
# TODO decide if i drop to bash on pis?
|
||||||
shell.fish.enable = true;
|
shell.fish.enable = true;
|
||||||
|
|
||||||
# TODO make nfs server configurable
|
nfs.nas = {
|
||||||
# nfs.nas = {
|
enable = true;
|
||||||
# enable = true;
|
lazy = true;
|
||||||
# lazy = true;
|
};
|
||||||
# };
|
|
||||||
|
|
||||||
system.resticBackup.local.enable = false;
|
system.resticBackup.local.enable = false;
|
||||||
system.resticBackup.remote.enable = false;
|
system.resticBackup.remote.enable = false;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
boot = {
|
boot = {
|
||||||
|
|
||||||
binfmt.emulatedSystems = [ "aarch64-linux" ]; # Enabled for raspi4 compilation
|
binfmt.emulatedSystems = [ "aarch64-linux" ]; # Enabled for raspi4 compilation
|
||||||
plymouth.enable = true; # hide console with splash screen
|
plymouth.enable = true; # hide console with splash screen
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
|
|
Reference in a new issue