mirror of
https://github.com/nmasur/dotfiles
synced 2025-08-24 06:04:41 +00:00
Compare commits
9 Commits
57c3719600
...
nixd
Author | SHA1 | Date | |
---|---|---|---|
|
6cf5f08fd5 | ||
|
8cba026f10 | ||
|
a6e4b3130d | ||
|
33868c1add | ||
|
d806bd7f56 | ||
|
120b97f970 | ||
|
5f71437e57 | ||
|
e8e65ba4d1 | ||
|
c594a0b161 |
17
flake.lock
generated
17
flake.lock
generated
@@ -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",
|
||||
|
@@ -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)
|
||||
];
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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" ];
|
||||
|
@@ -119,8 +119,8 @@
|
||||
font = wezterm.font('${font}', { weight = 'Bold'}),
|
||||
font_size = ${if pkgs.stdenv.isLinux then "14.0" else "18.0"},
|
||||
|
||||
-- Fix color blocks instead of text
|
||||
front_end = "WebGpu",
|
||||
-- Fix color blocks instead of text
|
||||
front_end = "WebGpu",
|
||||
|
||||
-- Tab Bar
|
||||
hide_tab_bar_if_only_one_tab = true,
|
||||
|
@@ -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 {
|
||||
|
@@ -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"
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
@@ -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";
|
||||
|
44
modules/nixos/services/audiobookshelf.nix
Normal file
44
modules/nixos/services/audiobookshelf.nix
Normal 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"
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
}
|
@@ -5,6 +5,7 @@
|
||||
{
|
||||
|
||||
imports = [
|
||||
./audiobookshelf.nix
|
||||
./arr.nix
|
||||
./backups.nix
|
||||
./bind.nix
|
||||
|
@@ -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 = {
|
||||
|
@@ -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";
|
||||
|
@@ -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=";
|
||||
|
Reference in New Issue
Block a user