9 Commits

Author SHA1 Message Date
Noah Masur
6cf5f08fd5 nixd neovim setup 2024-10-25 08:53:27 -04:00
Noah Masur
8cba026f10 temp: not sure if this is even required 2024-10-25 08:53:04 -04:00
Noah Masur
a6e4b3130d fix: tabs should be spaces 2024-10-19 09:01:26 -04:00
Noah Masur
33868c1add fix: only setup desktop entry for gui 2024-10-19 08:45:26 -04:00
Noah Masur
d806bd7f56 use dynamic terminal for neovim based on rofi in linux 2024-10-12 11:57:38 -04:00
Noah Masur
120b97f970 audiobookshelf 2024-10-12 15:18:58 +00:00
Noah Masur
5f71437e57 fix: samba setting renamed 2024-10-12 15:18:15 +00:00
Noah Masur
e8e65ba4d1 fix: zfs deprecated latest compatible linux 2024-10-12 15:17:51 +00:00
Noah Masur
c594a0b161 use flake input for gh-collaborators 2024-10-12 10:52:04 -04:00
15 changed files with 210 additions and 16 deletions

17
flake.lock generated
View File

@@ -244,6 +244,22 @@
"type": "github"
}
},
"gh-collaborators": {
"flake": false,
"locked": {
"lastModified": 1717117275,
"narHash": "sha256-x3p2bHL6U8gWanXnTTJGgA9x4Ixy9AOZiBbfcfn5VVw=",
"owner": "katiem0",
"repo": "gh-collaborators",
"rev": "4dfcd0b5c2e31f2d0fbfd4b83fdfae787a5e6ff8",
"type": "github"
},
"original": {
"owner": "katiem0",
"repo": "gh-collaborators",
"type": "github"
}
},
"hmts-nvim-src": {
"flake": false,
"locked": {
@@ -584,6 +600,7 @@
"disko": "disko",
"fidget-nvim-src": "fidget-nvim-src",
"firefox-darwin": "firefox-darwin",
"gh-collaborators": "gh-collaborators",
"hmts-nvim-src": "hmts-nvim-src",
"home-manager": "home-manager",
"mac-app-util": "mac-app-util",

View File

@@ -185,6 +185,11 @@
flake = false;
};
gh-collaborators = {
url = "github:katiem0/gh-collaborators";
flake = false;
};
# Nextcloud Apps
nextcloud-news = {
# https://github.com/nextcloud/news/releases
@@ -230,6 +235,7 @@
mail.smtpHost = "smtp.purelymail.com";
dotfilesRepo = "https://github.com/nmasur/dotfiles";
hostnames = {
audiobooks = "read.${baseName}";
files = "files.${baseName}";
git = "git.${baseName}";
influxdb = "influxdb.${baseName}";
@@ -260,7 +266,7 @@
(import ./overlays/mpv-scripts.nix inputs)
(import ./overlays/nextcloud-apps.nix inputs)
(import ./overlays/betterlockscreen.nix)
(import ./overlays/gh-collaborators.nix)
(import ./overlays/gh-collaborators.nix inputs)
(import ./overlays/ren-rep.nix inputs)
];

View File

@@ -67,6 +67,14 @@ inputs.nixpkgs.lib.nixosSystem rec {
devices = (import ../../disks/root.nix { disk = "/dev/nvme0n1"; });
};
zramSwap.enable = true;
swapDevices = [
{
device = "/swapfile";
size = 4 * 1024; # 4 GB
}
];
boot.zfs = {
# Automatically load the ZFS pool on boot
extraPools = [ "tank" ];
@@ -98,6 +106,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
dotfiles.enable = true;
arrs.enable = true;
filebrowser.enable = true;
services.audiobookshelf.enable = true;
services.bind.enable = true;
services.caddy.enable = true;
services.jellyfin.enable = true;

View File

@@ -159,6 +159,15 @@
};
};
# Mimic nixpkgs package environment for read-only profiles.ini management
# From: https://github.com/booxter/home-manager/commit/dd1602e306fec366280f5953c5e1b553e3d9672a
home.sessionVariables = {
MOZ_LEGACY_PROFILES = 1;
MOZ_ALLOW_DOWNGRADE = 1;
};
# launchd.user.envVariables = config.home-manager.users.${config.user}.home.sessionVariables;
xdg.mimeApps = {
associations.added = {
"text/html" = [ "firefox.desktop" ];

View File

@@ -11,6 +11,11 @@
options.terraform = lib.mkEnableOption "Whether to enable Terraform LSP";
options.github = lib.mkEnableOption "Whether to enable GitHub features";
options.kubernetes = lib.mkEnableOption "Whether to enable Kubernetes features";
options.nixosConfiguration = lib.mkOption {
type = lib.types.str;
description = "Configuration to use for nixd options checking";
default = "default";
};
config = {
plugins = [
@@ -43,6 +48,21 @@
use.lspconfig.nixd.setup = dsl.callWith {
cmd = [ "${pkgs.nixd}/bin/nixd" ];
capabilities = dsl.rawLua "require('cmp_nvim_lsp').default_capabilities()";
# settings = {
# nixd = {
# options = {
# nixos = {
# expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).nixosConfigurations.${config.nixosConfiguration}.options";
# };
# home-manager = {
# expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).homeConfigurations.${config.nixosConfiguration}.options";
# };
# darwin = {
# expr = "(builtins.getFlake (\"git+file://\" + toString ./.)).darwinConfigurations.${config.nixosConfiguration}.options";
# };
# };
# };
# };
};
use.lspconfig.pyright.setup = dsl.callWith {

View File

@@ -13,6 +13,7 @@ let
terraform = config.terraform.enable;
github = true;
kubernetes = config.kubernetes.enable;
nixosConfiguration = config.networking.hostName; # Used for Nixd
};
in
{
@@ -50,9 +51,9 @@ in
# Create a desktop option for launching Neovim from a file manager
# (Requires launching the terminal and then executing Neovim)
xdg.desktopEntries.nvim = lib.mkIf pkgs.stdenv.isLinux {
xdg.desktopEntries.nvim = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) {
name = "Neovim wrapper";
exec = "kitty nvim %F";
exec = "${config.home-manager.users.${config.user}.programs.rofi.terminal} nvim %F";
mimeType = [
"text/plain"
"text/markdown"

View File

@@ -32,6 +32,7 @@
terraform ? false,
github ? false,
kubernetes ? false,
nixosConfiguration ? "default",
...
}:
@@ -44,6 +45,7 @@ pkgs.neovimBuilder {
terraform
github
kubernetes
nixosConfiguration
;
imports = [
../config/align.nix

View File

@@ -1,4 +1,9 @@
{ config, lib, ... }:
{
config,
pkgs,
lib,
...
}:
{
options = {
@@ -8,7 +13,7 @@
config = lib.mkIf (config.server && config.zfs.enable) {
# Only use compatible Linux kernel, since ZFS can be behind
boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages;
boot.kernelPackages = pkgs.linuxPackages; # Defaults to latest LTS
boot.kernelParams = [ "nohibernate" ];
boot.supportedFilesystems = [ "zfs" ];
services.prometheus.exporters.zfs.enable = config.prometheus.exporters.enable;

View File

@@ -14,6 +14,11 @@ let
url = "localhost:7878";
apiKey = config.secrets.radarrApiKey.dest;
};
readarr = {
exportarrPort = "9711";
url = "localhost:8787";
apiKey = config.secrets.readarrApiKey.dest;
};
sonarr = {
exportarrPort = "9708";
url = "localhost:8989";
@@ -61,6 +66,10 @@ in
enable = true;
group = "media";
};
readarr = {
enable = true;
group = "media";
};
};
# Create a media group to be shared between services
@@ -110,6 +119,21 @@ in
}
];
}
{
group = "download";
match = [
{
host = [ config.hostnames.download ];
path = [ "/readarr*" ];
}
];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = arrConfig.readarr.url; } ];
}
];
}
{
group = "download";
match = [
@@ -223,6 +247,11 @@ in
dest = "/var/private/radarr-api";
prefix = "API_KEY=";
};
secrets.readarrApiKey = {
source = ../../../private/radarr-api-key.age;
dest = "/var/private/readarr-api";
prefix = "API_KEY=";
};
secrets.sonarrApiKey = {
source = ../../../private/sonarr-api-key.age;
dest = "/var/private/sonarr-api";

View File

@@ -0,0 +1,44 @@
{ config, lib, ... }:
{
options = {
hostnames.audiobooks = lib.mkOption {
type = lib.types.str;
description = "Hostname for audiobook server (Audiobookshelf).";
};
};
config = lib.mkIf config.services.audiobookshelf.enable {
services.audiobookshelf = {
dataDir = "audiobookshelf";
};
# Allow web traffic to Caddy
caddy.routes = [
{
match = [ { host = [ config.hostnames.audiobooks ]; } ];
handle = [
{
handler = "reverse_proxy";
upstreams = [ { dial = "localhost:${builtins.toString config.services.audiobookshelf.port}"; } ];
}
];
}
];
# Configure Cloudflare DNS to point to this machine
services.cloudflare-dyndns.domains = [ config.hostnames.audiobooks ];
# Grant user access to Audiobookshelf directories
users.users.${config.user}.extraGroups = [ config.services.audiobookshelf.group ];
# Grant audiobookshelf access to media and Calibre directories
users.users.${config.services.audiobookshelf.user}.extraGroups = [
"media"
"calibre-web"
];
};
}

View File

@@ -5,6 +5,7 @@
{
imports = [
./audiobookshelf.nix
./arr.nix
./backups.nix
./bind.nix

View File

@@ -53,6 +53,7 @@ in
uid = promUid;
}
];
# TODO: Add option to pull services from a list like Caddy does
dashboards.settings.providers = [
{
name = "test";
@@ -368,6 +369,18 @@ in
range = true;
refId = "C";
}
{
datasource = {
type = "prometheus";
uid = promUid;
};
editorMode = "code";
expr = "readarr_system_status";
hide = false;
legendFormat = "Readarr";
range = true;
refId = "F";
}
{
datasource = {
type = "prometheus";
@@ -819,6 +832,28 @@ in
}
];
}
{
matcher = {
id = "byName";
options = "localhost:8787";
};
properties = [
{
id = "displayName";
value = "Readarr";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.download}/readarr";
}
];
}
];
}
{
matcher = {
id = "byName";
@@ -1105,6 +1140,28 @@ in
}
];
}
{
matcher = {
id = "byName";
options = "localhost:${builtins.toString config.services.audiobookshelf.port}";
};
properties = [
{
id = "displayName";
value = "Audiobookshelf";
}
{
id = "links";
value = [
{
targetBlank = true;
title = "";
url = "https://${config.hostnames.audiobooks}";
}
];
}
];
}
];
};
gridPos = {

View File

@@ -7,7 +7,7 @@
services.samba = lib.mkIf config.services.samba.enable {
openFirewall = true;
shares.data = {
settings.data = {
path = "/data";
browseable = "yes";
"read only" = "no";

View File

@@ -1,15 +1,9 @@
_final: prev: {
inputs: _final: prev: {
gh-collaborators = prev.buildGoModule rec {
pname = "gh-collaborators";
version = "v2.0.3";
src = prev.fetchFromGitHub {
owner = "nmasur";
repo = "gh-collaborators";
rev = version;
sha256 = "sha256-XgAZ/+7QxIRKiAZ4Gp/rLgTABSXkVjFQ8TbXOFj9vpM=";
};
src = inputs.gh-collaborators;
# vendorHash = "sha256-rsRDOgJBa8T6+bC/APcmuRmg6ykbIp9pwRnJ9rrfHEs=";
vendorHash = "sha256-fykxRb2U9DDsXorRTLiVWmhMY89N7RS07sal8ww6gz4=";