20 Commits

Author SHA1 Message Date
Noah Masur
68d8e60b7e try to statically set caddy to prevent cloudflare hash breaking 2025-10-11 13:27:44 -04:00
Noah Masur
774773c748 fix: ghostty keybinds invalid after update 2025-09-23 15:40:01 -04:00
Noah Masur
c85d292d1a comment out flake check for neovim to try to fix gh actions 2025-09-20 11:28:26 -04:00
Noah Masur
78cc3559f6 fix: renamed settings for logind 2025-09-20 11:27:55 -04:00
Noah Masur
a35e758c2f python language server 2025-09-20 09:57:20 -04:00
Noah Masur
72f30cbab1 add chawan web browser 2025-09-20 09:57:20 -04:00
Noah Masur
17b30de163 fix ghostty on darwin 2025-09-20 09:57:20 -04:00
Noah Masur
8b3ab57b34 enable stalwart-mail for contacts 2025-09-17 03:35:20 +00:00
Noah Masur
483833cdcb fix: must update stateversion to fix meilisearch out of date 2025-09-17 02:45:46 +00:00
Noah Masur
57e593aabc fix: only sync gitea repos to backups 2025-09-16 11:47:46 +00:00
Noah Masur
b119256ba6 update cloudflare caddy 2025-09-16 11:45:03 +00:00
Noah Masur
54948353dd enable paperless email processing to pdf 2025-09-16 11:44:56 +00:00
github-actions[bot]
9c4219da40 flake.lock: Update
Flake lock file updates:

• Updated input 'disko':
    'github:nix-community/disko/4073ff2f481f9ef3501678ff479ed81402caae6d' (2025-08-18)
  → 'github:nix-community/disko/bafad29f89e83b2d861b493aa23034ea16595560' (2025-08-25)
• Updated input 'helix':
    'github:helix-editor/helix/22a3b10dd8ab907367ae1fe57d9703e22b30d391' (2025-08-22)
  → 'github:helix-editor/helix/77ff51caa440b1066e0a1920007ab5e148dd4856' (2025-08-29)
• Updated input 'home-manager':
    'github:nix-community/home-manager/8b55a6ac58b678199e5bba701aaff69e2b3281c0' (2025-08-23)
  → 'github:nix-community/home-manager/77a71380c38fb2a440b4b5881bbc839f6230e1cb' (2025-08-29)
• Updated input 'mac-app-util':
    'github:hraban/mac-app-util/341ede93f290df7957047682482c298e47291b4d' (2025-03-16)
  → 'github:hraban/mac-app-util/8414fa1e2cb775b17793104a9095aabeeada63ef' (2025-08-24)
• Added input 'mac-app-util/treefmt-nix':
    'github:numtide/treefmt-nix/74e1a52d5bd9430312f8d1b8b0354c92c17453e5' (2025-08-23)
• Added input 'mac-app-util/treefmt-nix/nixpkgs':
    'github:nixos/nixpkgs/cab778239e705082fe97bb4990e0d24c50924c04' (2025-08-04)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/20075955deac2583bb12f07151c2df830ef346b4' (2025-08-19)
  → 'github:nixos/nixpkgs/dfb2f12e899db4876308eba6d93455ab7da304cd' (2025-08-28)
• Updated input 'nur':
    'github:nix-community/nur/1a47d83c521c098debd6d1f2c2ae313a5bb729f9' (2025-08-23)
  → 'github:nix-community/nur/e82a8b0095f54edb6bbbb1d862f3da502dca1396' (2025-08-30)
2025-08-30 03:54:09 +00:00
Noah Masur
ae3735586e fix: accidentally doubled cloudflare plugins 2025-08-24 18:47:10 -04:00
Noah Masur
cb00bb2e72 remove deprecated cargo package settings 2025-08-24 16:46:21 -04:00
github-actions[bot]
e64a9f14d0 flake.lock: Update
Flake lock file updates:

• Updated input 'darwin':
    'github:lnl7/nix-darwin/7220b01d679e93ede8d7b25d6f392855b81dd475' (2025-08-15)
  → 'github:lnl7/nix-darwin/8df64f819698c1fee0c2969696f54a843b2231e8' (2025-08-22)
• Updated input 'disko':
    'github:nix-community/disko/8246829f2e675a46919718f9a64b71afe3bfb22d' (2025-08-12)
  → 'github:nix-community/disko/4073ff2f481f9ef3501678ff479ed81402caae6d' (2025-08-18)
• Updated input 'helix':
    'github:helix-editor/helix/a4a2b50a50971bc43952f5f75d19a56689793a6a' (2025-08-15)
  → 'github:helix-editor/helix/22a3b10dd8ab907367ae1fe57d9703e22b30d391' (2025-08-22)
• Updated input 'home-manager':
    'github:nix-community/home-manager/2a749f4790a14f7168be67cdf6e548ef1c944e10' (2025-08-16)
  → 'github:nix-community/home-manager/8b55a6ac58b678199e5bba701aaff69e2b3281c0' (2025-08-23)
• Updated input 'nix2vim':
    'github:gytis-ivaskevicius/nix2vim/94f136cece965e33aa4ccccb4ca1af04772851f4' (2025-07-15)
  → 'github:gytis-ivaskevicius/nix2vim/78467c8de07719f92397179844bf75cdf2e58b83' (2025-08-16)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/fbcf476f790d8a217c3eab4e12033dc4a0f6d23c' (2025-08-14)
  → 'github:nixos/nixpkgs/20075955deac2583bb12f07151c2df830ef346b4' (2025-08-19)
• Updated input 'nur':
    'github:nix-community/nur/160c1c1c8737a0e2109b6181a191779ac2e42f7f' (2025-08-16)
  → 'github:nix-community/nur/1a47d83c521c098debd6d1f2c2ae313a5bb729f9' (2025-08-23)
2025-08-23 03:58:42 +00:00
Noah Masur
e2e179c0e5 Try to fix automatic timezone issues 2025-08-19 08:51:18 -04:00
Noah Masur
e975db7385 replace cloudflare caddy with exact commit 2025-08-17 20:23:22 -04:00
Noah Masur
08ec8ce4b8 reenable zellij by default in the shell 2025-08-17 20:23:17 -04:00
Noah Masur
7388eed876 disable swipe for back and forward in firefox 2025-08-17 20:04:49 -04:00
23 changed files with 199 additions and 83 deletions

91
flake.lock generated
View File

@@ -22,11 +22,11 @@
]
},
"locked": {
"lastModified": 1755275010,
"narHash": "sha256-lEApCoWUEWh0Ifc3k1JdVjpMtFFXeL2gG1qvBnoRc2I=",
"lastModified": 1755825449,
"narHash": "sha256-XkiN4NM9Xdy59h69Pc+Vg4PxkSm9EWl6u7k6D5FZ5cM=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "7220b01d679e93ede8d7b25d6f392855b81dd475",
"rev": "8df64f819698c1fee0c2969696f54a843b2231e8",
"type": "github"
},
"original": {
@@ -43,11 +43,11 @@
]
},
"locked": {
"lastModified": 1754971456,
"narHash": "sha256-p04ZnIBGzerSyiY2dNGmookCldhldWAu03y0s3P8CB0=",
"lastModified": 1756115622,
"narHash": "sha256-iv8xVtmLMNLWFcDM/HcAPLRGONyTRpzL9NS09RnryRM=",
"owner": "nix-community",
"repo": "disko",
"rev": "8246829f2e675a46919718f9a64b71afe3bfb22d",
"rev": "bafad29f89e83b2d861b493aa23034ea16595560",
"type": "github"
},
"original": {
@@ -156,11 +156,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1755269578,
"narHash": "sha256-KiVR83GhEdKrBQm5JqAOSLbWsH8q4sN+acoLZziZCCM=",
"lastModified": 1756477005,
"narHash": "sha256-e/FNNIT/LPuoruzRQZf5z5L5GApq1G2y2PShy+Lakhs=",
"owner": "helix-editor",
"repo": "helix",
"rev": "a4a2b50a50971bc43952f5f75d19a56689793a6a",
"rev": "77ff51caa440b1066e0a1920007ab5e148dd4856",
"type": "github"
},
"original": {
@@ -176,11 +176,11 @@
]
},
"locked": {
"lastModified": 1755313937,
"narHash": "sha256-pQb7bNcolxYGRiylUCrTddiF+qW2wsUiM9+eRIDUrVU=",
"lastModified": 1756496801,
"narHash": "sha256-IYIsnPy+cJxe8RbDHBrCtfJY0ry2bG2H7WvMcewiGS8=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "2a749f4790a14f7168be67cdf6e548ef1c944e10",
"rev": "77a71380c38fb2a440b4b5881bbc839f6230e1cb",
"type": "github"
},
"original": {
@@ -198,14 +198,15 @@
"nixpkgs": [
"nixpkgs"
],
"systems": "systems"
"systems": "systems",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1742156590,
"narHash": "sha256-aTM/2CrNN5utdVEQGsOA+kl4UozgH7VPLBQL5OXtBrg=",
"lastModified": 1756057867,
"narHash": "sha256-ziR5eQGqRWhW8tf8r0TIplaqNt+HXu1G1X41LUr4IYo=",
"owner": "hraban",
"repo": "mac-app-util",
"rev": "341ede93f290df7957047682482c298e47291b4d",
"rev": "8414fa1e2cb775b17793104a9095aabeeada63ef",
"type": "github"
},
"original": {
@@ -222,11 +223,11 @@
]
},
"locked": {
"lastModified": 1752588843,
"narHash": "sha256-T4vw0himO8ami5uR7cry+El9HlQkqNcy/UtIFwkcTMw=",
"lastModified": 1755344765,
"narHash": "sha256-k/Cvh/mzb5lSvilKdgwNBCyAyYmD8YPr1nc0sTSgwxI=",
"owner": "gytis-ivaskevicius",
"repo": "nix2vim",
"rev": "94f136cece965e33aa4ccccb4ca1af04772851f4",
"rev": "78467c8de07719f92397179844bf75cdf2e58b83",
"type": "github"
},
"original": {
@@ -273,16 +274,16 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1755186698,
"narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=",
"lastModified": 1754340878,
"narHash": "sha256-lgmUyVQL9tSnvvIvBp7x1euhkkCho7n3TMzgjdvgPoU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c",
"rev": "cab778239e705082fe97bb4990e0d24c50924c04",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
@@ -304,6 +305,22 @@
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1756386758,
"narHash": "sha256-1wxxznpW2CKvI9VdniaUnTT2Os6rdRJcRUf65ZK9OtE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dfb2f12e899db4876308eba6d93455ab7da304cd",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1728538411,
"narHash": "sha256-f0SBJz1eZ2yOuKUr5CA9BHULGXVSn6miBuUWdTyhUhU=",
@@ -327,11 +344,11 @@
]
},
"locked": {
"lastModified": 1755316419,
"narHash": "sha256-+yBEbWOu1ejKm2SqMIr8yH0j1PYdX3W9hwgSLntW2Xg=",
"lastModified": 1756524478,
"narHash": "sha256-2oSBlcYCgwrVxUZwM8MV6hBFsfsWFbeN5ErQiCA+38s=",
"owner": "nix-community",
"repo": "nur",
"rev": "160c1c1c8737a0e2109b6181a191779ac2e42f7f",
"rev": "e82a8b0095f54edb6bbbb1d862f3da502dca1396",
"type": "github"
},
"original": {
@@ -349,7 +366,7 @@
"mac-app-util": "mac-app-util",
"nix2vim": "nix2vim",
"nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs",
"nixpkgs": "nixpkgs_2",
"nixpkgs-stable": "nixpkgs-stable",
"nur": "nur",
"wsl": "wsl",
@@ -380,7 +397,7 @@
},
"rust-overlay_2": {
"inputs": {
"nixpkgs": "nixpkgs_2"
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1736476219,
@@ -441,6 +458,24 @@
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1755934250,
"narHash": "sha256-CsDojnMgYsfshQw3t4zjRUkmMmUdZGthl16bXVWgRYU=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "74e1a52d5bd9430312f8d1b8b0354c92c17453e5",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"wsl": {
"inputs": {
"flake-compat": "flake-compat_2",

View File

@@ -114,6 +114,7 @@
bookmarks = "keep.${baseName}";
books = "books.${baseName}";
budget = "money.${baseName}";
contacts = "contacts.${baseName}";
content = "cloud.${baseName}";
download = "download.${baseName}";
files = "files.${baseName}";
@@ -246,30 +247,30 @@
default = lib.pkgsBySystem.${system}.nmasur.dotfiles-devshell;
});
checks = lib.forAllSystems (
system:
let
pkgs = import nixpkgs {
inherit system;
overlays = lib.overlays;
};
in
{
neovim =
pkgs.runCommand "neovim-check-health" { buildInputs = [ inputs.self.packages.${system}.neovim ]; }
''
mkdir -p $out
export HOME=$TMPDIR
nvim -c "checkhealth" -c "write $out/health.log" -c "quitall"
# checks = lib.forAllSystems (
# system:
# let
# pkgs = import nixpkgs {
# inherit system;
# overlays = lib.overlays;
# };
# in
# {
# neovim =
# pkgs.runCommand "neovim-check-health" { buildInputs = [ inputs.self.packages.${system}.neovim ]; }
# ''
# mkdir -p $out
# export HOME=$TMPDIR
# nvim -c "checkhealth" -c "write $out/health.log" -c "quitall"
# Check for errors inside the health log
if $(grep "ERROR" $out/health.log); then
cat $out/health.log
exit 1
fi
'';
}
);
# # Check for errors inside the health log
# if $(grep "ERROR" $out/health.log); then
# cat $out/health.log
# exit 1
# fi
# '';
# }
# );
formatter = lib.forAllSystems (
system:

View File

@@ -31,10 +31,10 @@ rec {
power-user.enable = true;
};
nmasur.presets.programs.helix.enable = true;
home.stateVersion = "23.05";
home.stateVersion = "25.05";
};
system.stateVersion = "23.05";
system.stateVersion = "25.05";
# File systems must be declared in order to boot
# # This is the root filesystem containing NixOS

View File

@@ -33,9 +33,6 @@ rec {
system.stateVersion = "23.05";
# Overrides
services.automatic-timezoned.enable = false;
# Not sure what's necessary but too afraid to remove anything
boot.initrd.availableKernelModules = [
"xhci_pci"

15
pkgs/caddy/package.nix Normal file
View File

@@ -0,0 +1,15 @@
# Caddy with Cloudflare DNS
{
pkgs,
...
}:
# Maintain a static version so that the plugin hash doesn't keep breaking
(pkgs.caddy.override {
version = "2.10.2";
}).withPlugins
{
plugins = [ "github.com/caddy-dns/cloudflare@v0.2.1" ];
hash = "sha256-AcWko5513hO8I0lvbCLqVbM1eWegAhoM0J0qXoWL/vI=";
}

View File

@@ -8,6 +8,5 @@ pkgs.rustPlatform.buildRustPackage {
rev = "50c40172e354caffee48932266edd7c7a76a20fd";
sha256 = "sha256-zVIt6Xp+Mvym6gySvHIZJt1QgzKVP/wbTGTubWk6kzI=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-lSeO/GaJPZ8zosOIJRXVIEuPXaBg1GBvKBIuXtu1xZg=";
}

View File

@@ -8,6 +8,5 @@ pkgs.rustPlatform.buildRustPackage {
rev = "2a24f95170aa14b5182b2287125664a62f8688ef";
sha256 = "sha256-gBxrbGCy6JEHnmgJmcm8sgtEvCAqra8/gPGsfCEfLqg=";
};
useFetchCargoVendor = true;
cargoHash = "sha256-t4tfQaFq4EV4ZWeU+IestSFiSAIeVQslTZhLbpKVoO4=";
}

View File

@@ -74,6 +74,8 @@ in
"svg.context-properties.content.enabled" = true; # Sidebery styling
"browser.tabs.hoverPreview.enabled" = false; # Disable tab previews
"browser.tabs.hoverPreview.showThumbnails" = false; # Disable tab previews
"browser.gesture.swipe.left" = "cmd_scrollLeft"; # Disable swipe to go back
"browser.gesture.swipe.right" = "cmd_scrollRight"; # Disable swipe to go forward
};
userChrome = ''
:root {

View File

@@ -21,7 +21,7 @@ in
programs.ghostty = {
enable = true;
package = if pkgs.stdenv.isDarwin then pkgs.nur.repos.DimitarNestorov.ghostty else pkgs.ghostty;
package = if pkgs.stdenv.isDarwin then null else pkgs.ghostty;
enableFishIntegration = true;
enableBashIntegration = true;
@@ -37,8 +37,8 @@ in
fullscreen = if pkgs.stdenv.isDarwin then true else false;
keybind = [
"super+t=unbind" # Pass super-t to underlying tool (e.g. zellij tabs)
"super+shift+]=unbind"
"super+shift+[=unbind"
"super+shift+bracket_right=unbind"
"super+shift+bracket_left=unbind"
"ctrl+tab=unbind"
"ctrl+shift+tab=unbind"
"ctrl+tab=text:\\x1b[9;5u"

View File

@@ -46,6 +46,10 @@ in
command = "${pkgs.nixd}/bin/nixd";
};
language-server.ty = {
command = "${pkgs.ty}/bin/ty";
};
language-server.fish-lsp = {
command = "${pkgs.fish-lsp}/bin/fish-lsp";
};
@@ -59,7 +63,8 @@ in
};
language-server.terraform-ls = {
command = "${lib.getExe pkgs.terraform-ls} serve";
command = "${lib.getExe pkgs.terraform-ls}";
args = [ "serve" ];
};
language-server.bash-language-server = {

View File

@@ -81,10 +81,10 @@ in
enable = true;
# Auto start on shell init
enableBashIntegration = false;
enableFishIntegration = false;
enableZshIntegration = false;
attachExistingSession = false;
enableBashIntegration = true;
enableFishIntegration = true;
enableZshIntegration = true;
attachExistingSession = true;
exitShellOnExit = false;
settings = {

View File

@@ -57,7 +57,7 @@ function obj:init()
self.launcher:bind("ctrl", "space", function() end)
self.launcher:bind("", "return", function()
-- self:switch("@wezterm@")
self:switch("@ghostty@")
self:switch("/Applications/Ghostty.app")
end)
self.launcher:bind("", "C", function()
self:switch("Calendar.app")

View File

@@ -23,7 +23,6 @@ in
{
discord = "${pkgs.discord}/Applications/Discord.app";
firefox = "${pkgs.firefox-unwrapped}/Applications/Firefox.app";
ghostty = "${config.programs.ghostty.package}/Applications/Ghostty.app";
obsidian = "${pkgs.obsidian}/Applications/Obsidian.app";
slack = "${pkgs.slack}/Applications/Slack.app";
wezterm = "${pkgs.wezterm}/Applications/WezTerm.app";

View File

@@ -29,6 +29,8 @@ in
pkgs.charm # Manage account and filesystem
pkgs.pop # Send emails from a TUI
pkgs.chawan # Browser TUI
];
programs.gh-dash.enable = lib.mkDefault true;

View File

@@ -6,7 +6,6 @@
}:
let
inherit (config.nmasur.settings) username;
cfg = config.nmasur.presets.services.dock;
in
@@ -50,7 +49,7 @@ in
"/System/Applications/Messages.app"
"/System/Applications/Mail.app"
"/Applications/zoom.us.app"
"${config.home-manager.users.${username}.programs.ghostty.package}/Applications/Ghostty.app"
"/Applications/Ghostty.app"
"${pkgs.discord}/Applications/Discord.app"
"${pkgs.obsidian}/Applications/Obsidian.app"
];

View File

@@ -39,6 +39,7 @@ in
"scroll-reverser" # Different scroll style for mouse vs. trackpad
"notunes" # Don't launch Apple Music with the play button
"topnotch" # Darkens the menu bar to complete black
"ghostty" # Terminal application (not buildable on Nix on macOS)
];
};

View File

@@ -66,10 +66,7 @@ in
nmasur.presets.services.caddy.cidrAllowlist = cloudflareIpRanges;
# Tell Caddy to use Cloudflare DNS for ACME challenge validation
services.caddy.package = pkgs.caddy.withPlugins {
plugins = [ "github.com/caddy-dns/cloudflare@v0.2.1" ];
hash = "sha256-2D7dnG50CwtCho+U+iHmSj2w14zllQXPjmTHr6lJZ/A=";
};
services.caddy.package = pkgs.nmasur.caddy;
nmasur.presets.services.caddy.tlsPolicies = [
{
issuers = [
@@ -159,12 +156,13 @@ in
requires = [ "cloudflare-api-secret.service" ];
script =
let
args =
[ "--cache-file /var/lib/cloudflare-dyndns/ip.cache" ]
++ (if config.services.cloudflare-dyndns.ipv4 then [ "-4" ] else [ "-no-4" ])
++ (if config.services.cloudflare-dyndns.ipv6 then [ "-6" ] else [ "-no-6" ])
++ lib.optional config.services.cloudflare-dyndns.deleteMissing "--delete-missing"
++ lib.optional config.services.cloudflare-dyndns.proxied "--proxied";
args = [
"--cache-file /var/lib/cloudflare-dyndns/ip.cache"
]
++ (if config.services.cloudflare-dyndns.ipv4 then [ "-4" ] else [ "-no-4" ])
++ (if config.services.cloudflare-dyndns.ipv6 then [ "-6" ] else [ "-no-6" ])
++ lib.optional config.services.cloudflare-dyndns.deleteMissing "--delete-missing"
++ lib.optional config.services.cloudflare-dyndns.proxied "--proxied";
in
lib.mkForce ''
export CLOUDFLARE_API_TOKEN=$(cat ''${CREDENTIALS_DIRECTORY}/apiToken)

View File

@@ -158,7 +158,7 @@ in
};
script = ''
${pkgs.awscli2}/bin/aws s3 sync --exclude */gitea.db* \
${giteaPath}/ \
${giteaPath}/repositories/ \
s3://${config.nmasur.presets.services.litestream.s3.bucket}/gitea-data/ \
--endpoint-url=https://${config.nmasur.presets.services.litestream.s3.endpoint}
'';

View File

@@ -10,8 +10,8 @@ in
config = lib.mkIf cfg.enable {
# Use power button to sleep instead of poweroff
services.logind.powerKey = "suspend";
services.logind.powerKeyLongPress = "poweroff";
services.logind.settings.Login.HandlePowerKey = "suspend";
services.logind.settings.Login.HandlePowerKeyLongPress = "poweroff";
};

View File

@@ -17,9 +17,11 @@ in
enable = true;
mediaDir = "/data/generic/paperless";
passwordFile = config.secrets.paperless.dest;
configureTika = true; # Enable processing of emails
settings = {
PAPERLESS_OCR_USER_ARGS = builtins.toJSON { invalidate_digital_signatures = true; };
PAPERLESS_URL = "https://${hostnames.paperless}";
PAPERLESS_DATE_ORDER = "MDY"; # Check document for US-formatted dates
# Enable if changing the path name in Caddy
# PAPERLESS_FORCE_SCRIPT_NAME = "/paperless";

View File

@@ -0,0 +1,56 @@
# Stalwart is a self-hosted email service, but in my case I want to use it as a
# vCard contacts database server and ignore the email component.
{ config, lib, ... }:
let
inherit (config.nmasur.settings) hostnames;
cfg = config.nmasur.presets.services.stalwart-mail;
in
{
options.nmasur.presets.services.stalwart-mail = {
enable = lib.mkEnableOption "Stalwart mail and contacts server";
port = lib.mkOption {
type = lib.types.port;
description = "Port to use for the localhost";
default = 7982;
};
};
config = lib.mkIf cfg.enable {
services.stalwart-mail = {
enable = true;
settings = {
server.listener.http = {
bind = [ "127.0.0.1:${builtins.toString cfg.port}" ];
protocol = "http";
};
authentication.fallback-admin = {
user = "admin";
secret = "$6$W/zXJP0xtZSUQqIe$DedCz9ncAn8mtfQVCg8Fzguuz.x8u1dfVU/d7wKyc6ujLuY4WCdtY0OeYwpv8huJfKAgBKE3go2MTrT99ID7I1";
};
};
};
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ hostnames.contacts ];
# Allow web traffic to Caddy
nmasur.presets.services.caddy.routes = [
{
match = [ { host = [ hostnames.contacts ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [
{ dial = "localhost:${builtins.toString cfg.port}"; }
];
}
];
}
];
};
}

View File

@@ -36,6 +36,7 @@ in
ntfy-sh.enable = lib.mkDefault true;
pgweb.enable = lib.mkDefault true;
postgresql.enable = lib.mkDefault true;
stalwart-mail.enable = lib.mkDefault true;
thelounge.enable = lib.mkDefault true;
uptime-kuma.enable = lib.mkDefault true;
vaultwarden.enable = lib.mkDefault true;

View File

@@ -24,6 +24,11 @@ in
# Enable automatic timezone updates based on location
services.automatic-timezoned.enable = lib.mkDefault true;
services.geoclue2 = {
# see: https://github.com/NixOS/nixpkgs/issues/68489#issuecomment-1484030107
enableDemoAgent = lib.mkForce true;
geoProviderUrl = "https://beacondb.net/v1/geolocate";
};
# Allow reading from Windows drives
boot.supportedFilesystems = [ "ntfs" ];