1

Compare commits

...

19 Commits

Author SHA1 Message Date
fa286dce16 System/Nixinator: Mark /home as neededForBoot 2026-02-17 11:08:02 +01:00
c4454daab6 Modules/Firefox: Disable vdhcoapp 2026-02-17 11:07:54 +01:00
a03c9d8227 Flake: Update lock 2026-02-17 10:53:26 +01:00
9db5d91da6 Modules/Niri: Enable danksearch 2026-02-17 10:53:26 +01:00
72716230ea Modules/Neovim: Make clangd-extensions non-lazy 2026-02-17 10:53:26 +01:00
2919e797ed System: Harden SSHD and authorize key 2026-02-17 10:53:26 +01:00
86d669c2ab Modules/Niri: Add colorpicker widget to bar 2026-02-17 10:53:26 +01:00
77ac5b70b8 Services/Formula12: Init 2026-02-17 10:53:26 +01:00
54839be395 Config/Flake: Update pkgs.hiPrio to lib.hiPrio 2026-02-17 10:53:26 +01:00
714e3e0683 Config/Neovim: Add bundler script to generate portable neovim config 2026-02-10 18:11:01 +01:00
a8d7d1e666 Modules/Impermanence: Persist tiddl config 2026-02-10 14:54:51 +01:00
40bcc14304 Modules/Neovim: Add justfile support 2026-02-09 18:55:41 +01:00
fa5bd0eefd Modules/Neovim: Display whitespace in visual mode 2026-02-09 15:50:46 +01:00
6182ada581 Modules/Neovim: Add makefile formatter 2026-02-09 15:50:24 +01:00
4acddcec09 Modules/Firefox: Add godbolt bookmark 2026-02-09 14:00:05 +01:00
5c14817464 Config/Navi: Add tiddl cheat 2026-02-04 20:23:40 +01:00
38920bd3d7 Derivations/Tiddle: Add tiddl derivation 2026-02-04 20:16:54 +01:00
b89934d13f Services/Kiwix: Init kiwix at v3.8.1 2026-02-03 11:28:16 +01:00
734dfcadfc Services/Immich: Update to v2.5.2 2026-02-03 11:28:00 +01:00
26 changed files with 611 additions and 128 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@ config/neovim/store
home/modules/ags/config/types home/modules/ags/config/types
home/modules/ags/config/tsconfig.json home/modules/ags/config/tsconfig.json
system/modules/agenix/secrets.nix system/modules/agenix/secrets.nix
config/neovim/nvim_bundle

View File

@ -68,7 +68,7 @@ rec {
# bintools = pkgs.bintools.bintools; # Unwrapped bintools # bintools = pkgs.bintools.bintools; # Unwrapped bintools
# libc = pkgs.glibc; # libc = pkgs.glibc;
# }; # };
# gcc = pkgs.hiPrio (pkgs.wrapCCWith { # gcc = lib.hiPrio (pkgs.wrapCCWith {
# cc = pkgs.gcc.cc; # Unwrapped gcc # cc = pkgs.gcc.cc; # Unwrapped gcc
# libc = pkgs.glibc; # libc = pkgs.glibc;
# bintools = bintools; # bintools = bintools;
@ -84,7 +84,7 @@ rec {
# bintools = pkgs.bintools.bintools; # Unwrapped bintools # bintools = pkgs.bintools.bintools; # Unwrapped bintools
# libc = pkgs.glibc_multi; # libc = pkgs.glibc_multi;
# }; # };
# gcc_multilib = pkgs.hiPrio (pkgs.wrapCCWith { # gcc_multilib = lib.hiPrio (pkgs.wrapCCWith {
# cc = pkgs.gcc.cc; # Unwrapped gcc # cc = pkgs.gcc.cc; # Unwrapped gcc
# libc = pkgs.glibc_multi; # libc = pkgs.glibc_multi;
# bintools = bintools_multilib; # bintools = bintools_multilib;

View File

@ -210,6 +210,10 @@ Convert line endings to dos format
unix2dos <file> unix2dos <file>
$ file: eza -1 $ file: eza -1
% tiddl
Download stuff from tidal
tiddl download --track-quality max --path ~/Downloads/Beet/Albums --videos none url "<url>"
; =========================== ; ===========================
; SECRETS ; SECRETS
; =========================== ; ===========================

204
config/neovim/bundle.py Normal file
View File

@ -0,0 +1,204 @@
#!/usr/bin/env python3
import argparse
import os
import re
import shutil
import subprocess
from typing import cast
from urllib.request import urlretrieve
INIT_LUA: str = "/home/christoph/.config/nvim/init.lua"
def patch_paths(text: str, mappings: dict[str, str]) -> str:
"""Patches /nix/store paths in init.lua"""
patched = text
for old, new in mappings.items():
print(f"Patching init.lua: {old} -> {new}")
patched = patched.replace(old, new)
return patched
def patch_various(text: str) -> str:
"""Patches various incompatibilities with NixVim init.lua"""
# Install lazy
print("Patching init.lua: Bootstrap lazy.nvim")
patched = (
"""-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
"""
+ text
)
# print("Patching init.lua: Disabling vim.loader")
# patched = patched.replace("vim.loader.enable(true)", "vim.loader.enable(false)")
return patched
def copy_plugins(text: str, path: str) -> dict[str, str]:
"""Copies NeoVim plugins from the Nix Store"""
os.makedirs(path, exist_ok=True)
plugins_path: str = re.findall(r"\"(/nix/store/.*-lazy-plugins)\"", text)[0]
print(f"Copying: {plugins_path} -> {path}/plugins")
_ = shutil.copytree(plugins_path, f"{path}/plugins")
treesitter_path: str = re.findall(
r"\"(/nix/store/.*-vimplugin-nvim-treesitter.*)\"", text
)[0]
print(f"Copying: {treesitter_path} -> {path}/treesitter")
_ = shutil.copytree(treesitter_path, f"{path}/treesitter")
parsers_path: str = re.findall(r"\"(/nix/store/.*-treesitter-parsers)\"", text)[0]
print(f"Copying: {parsers_path} -> {path}/parsers")
_ = shutil.copytree(parsers_path, f"{path}/parsers")
return {
plugins_path: "./plugins",
treesitter_path: "./treesitter",
parsers_path: "./parsers",
}
def write_file(text: str, path: str) -> None:
"""Write text to a file"""
with open(path, "w") as file:
_ = file.write(text)
# TODO: Could add etc. nvim/lsp/formatter/linter binaries here
# TODO: Needs "install recipe", as in most cases the download will be an archive
DOWNLOADS: list[tuple[str, str]] = [
# (
# "https://github.com/neovim/neovim/releases/download/v0.11.6/nvim-linux-x86_64.tar.gz",
# "nvim",
# ),
]
def download_binaries(path: str, urls: list[tuple[str, str]]) -> None:
"""Download required binaries"""
os.makedirs(f"{path}/bin", exist_ok=True)
def download(url: str, path: str) -> None:
"""Download from URL"""
print(f"Downloading: {url}")
_ = urlretrieve(url, path)
for url, name in urls:
download(url, f"{path}/bin/{name}")
def build_nvim(path: str) -> None:
"""Builds a static nvim binary against musl"""
# TODO: Build etc. is working, but on the target system there are
# lua-ffi errors from noice.nvim with the static binary.
# This does not happen with nvim from system package repository.
def run(command: list[str]) -> None:
"""Run a subprocess"""
print(f"Running: {' '.join(command)}")
_ = subprocess.run(command)
os.makedirs(f"{path}/nvim-build", exist_ok=True)
with open(f"{path}/nvim-build/build-nvim.sh", "w") as file:
_ = file.write(
"\n".join(
[
"#!/bin/sh",
"git clone https://github.com/neovim/neovim",
"cd neovim",
"git checkout stable",
'make -j$(nproc) CMAKE_BUILD_TYPE=Release CMAKE_EXTRA_FLAGS="-DSTATIC_BUILD=1"',
"make CMAKE_INSTALL_PREFIX=/workdir/install install",
]
)
)
run(
[
"docker",
"run",
"--rm",
"-it",
"-v",
f"{os.path.abspath(path)}/nvim-build:/workdir",
"-w",
"/workdir",
"alpine:3.23.3",
"/bin/sh",
"-c",
"apk add build-base cmake coreutils curl gettext-tiny-dev git && chmod +x ./build-nvim.sh && ./build-nvim.sh",
]
)
_ = shutil.copytree(f"{path}/nvim-build/install/bin", f"{path}/bin")
_ = shutil.copytree(f"{path}/nvim-build/install/lib", f"{path}/lib")
_ = shutil.copytree(f"{path}/nvim-build/install/share", f"{path}/share")
_ = shutil.rmtree(f"{path}/nvim-build")
def bundle() -> None:
"""Creates a standalone NeoVim bundle from the NixVim configuration"""
parser = argparse.ArgumentParser()
_ = parser.add_argument(
"--config",
type=str,
default=INIT_LUA,
help="init.lua or other config file",
)
_ = parser.add_argument(
"--out",
type=str,
default="./nvim_bundle",
help="destination folder",
)
args = parser.parse_args()
args.config = cast(str, args.config)
args.out = cast(str, args.out)
with open(args.config, "r") as file:
patched_init_lua: str = file.read()
path_mappings = copy_plugins(patched_init_lua, args.out)
patched_init_lua = patch_paths(patched_init_lua, path_mappings)
patched_init_lua = patch_various(patched_init_lua)
write_file(patched_init_lua, f"{args.out}/init.lua")
# build_nvim(args.out)
# download_binaries(args.out, DOWNLOADS)
if __name__ == "__main__":
bundle()

6
config/neovim/info.md Normal file
View File

@ -0,0 +1,6 @@
# NeoVim Portable
## Requirements
- Base packages: `sudo apt install neovim git direnv ripgrep curl fzf`
- Link or copy the generated `nvim_bundle` to `~/.config/nvim` on the target machine

View File

@ -9,4 +9,5 @@
msty = pkgs.callPackage ./msty {}; msty = pkgs.callPackage ./msty {};
unityhub = pkgs.callPackage ./unityhub {}; unityhub = pkgs.callPackage ./unityhub {};
tidal-dl-ng = pkgs.callPackage ./tidal-dl-ng {}; tidal-dl-ng = pkgs.callPackage ./tidal-dl-ng {};
tiddl = pkgs.callPackage ./tiddl {};
} }

View File

@ -50,8 +50,8 @@
# }); # });
tidalDlNg = pythonPkgs.buildPythonApplication rec { tidalDlNg = pythonPkgs.buildPythonApplication rec {
pname = "tidal_dl_ng"; pname = "tidal_dl_ng_for_dj";
version = "0.33.0"; version = "0.33.2";
format = "pyproject"; format = "pyproject";
# The official repo was deleted # The official repo was deleted
@ -62,24 +62,20 @@
# sha256 = "sha256-PUT0anx1yivgXwW21jah7Rv1/BabOT+KPoW446NFNyg="; # sha256 = "sha256-PUT0anx1yivgXwW21jah7Rv1/BabOT+KPoW446NFNyg=";
# }; # };
# Alternative repo # Package now also deleted from PyPi
# src = pkgs.fetchFromGitHub { # src = pythonPkgs.fetchPypi {
# owner = "rodvicj"; # inherit pname version;
# repo = "tidal_dl_ng-Project"; # sha256 = "sha256-rOMyxnT7uVnMbn678DFtqAu4+Uc5VFGcqGI0jxplnpc=";
# rev = "4573142c76ef045ebf8e80c34657dd2bec96f17d";
# sha256 = "sha256-3sO2qj8V4KXOWK7vQsFAOYeTZo2rsc/M36SwRnC0oVg=";
# }; # };
# Package is still on PyPi # TODO: Borked
# "For DJ"-Fork
src = pythonPkgs.fetchPypi { src = pythonPkgs.fetchPypi {
inherit pname version; inherit pname version;
sha256 = "sha256-rOMyxnT7uVnMbn678DFtqAu4+Uc5VFGcqGI0jxplnpc="; sha256 = "sha256-605cgBqZV6L7sxWtEa4Ki+9hBqX4m3Rk+X5oY5bv/FQ=";
}; };
doCheck = false;
dontCheckRuntimeDeps = true; dontCheckRuntimeDeps = true;
catchConflicts = false;
strictDeps = false;
nativeBuildInputs = with pythonPkgs; [poetry-core setuptools]; nativeBuildInputs = with pythonPkgs; [poetry-core setuptools];
@ -132,7 +128,7 @@
tidal-dl-ng-gui-desktopfile = pkgs.stdenv.mkDerivation { tidal-dl-ng-gui-desktopfile = pkgs.stdenv.mkDerivation {
pname = "tdng"; pname = "tdng";
version = "0.31.3"; version = "0.33.2";
dontUnpack = true; dontUnpack = true;
nativeBuildInputs = [pkgs.makeWrapper]; nativeBuildInputs = [pkgs.makeWrapper];

View File

@ -0,0 +1,60 @@
{
lib,
stdenv,
pkgs,
}: let
pythonPkgs = pkgs.python314Packages.overrideScope (self: super: {
typer = super.typer.overridePythonAttrs (old: {
version = "0.20.1";
src = pkgs.fetchPypi {
pname = "typer";
version = "0.20.0";
sha256 = "sha256-Gq9klAMXk+SHb7C6z6apErVRz0PB5jyADfixqGZyDDc=";
};
});
aiofiles = super.aiofiles.overridePythonAttrs (old: {
version = "25.1.0";
src = pkgs.fetchFromGitHub {
owner = "Tinche";
repo = "aiofiles";
tag = "v25.1.0";
hash = "sha256-NBmzoUb2una3+eWqR1HraVPibaRb9I51aYwskrjxskQ=";
};
# Build system changed in this version
build-system = with pythonPkgs; [
hatchling
hatch-vcs
];
});
});
in
pythonPkgs.buildPythonApplication rec {
pname = "tiddl";
version = "3.2.0";
format = "pyproject";
src = pythonPkgs.fetchPypi {
inherit pname version;
sha256 = "sha256-uLkGyIScYPqFgQdPAOYJDJG0jp+nDAwIl2kFkaJZFco=";
};
dontCheckRuntimeDeps = true;
build-system = with pythonPkgs; [
poetry-core
setuptools
];
propagatedBuildInputs = with pythonPkgs; [
# Nixpkgs
aiofiles
aiohttp
m3u8
mutagen
pydantic
requests
requests-cache
typer
];
}

231
flake.lock generated
View File

@ -20,11 +20,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767024902, "lastModified": 1770895474,
"narHash": "sha256-sMdk6QkMDhIOnvULXKUM8WW8iyi551SWw2i6KQHbrrU=", "narHash": "sha256-JBcrq1Y0uw87VZdYsByVbv+GBuT6ECaCNb9txLX9UuU=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "b8a0c5ba5a9fbd2c660be7dd98bdde0ff3798556", "rev": "a494d50d32b5567956b558437ceaa58a380712f7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -44,11 +44,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768659593, "lastModified": 1771120934,
"narHash": "sha256-Cjm5dbWWds9fLvOXHG5Co8Lfgv4/o3h7KhtfhLM28cU=", "narHash": "sha256-CnE8v42+SU7uLjTit453knxuwsMxZixEPU4s/6JANjs=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "shell", "repo": "shell",
"rev": "fd1165f1530b55c0751f8af7475d0c588b11488c", "rev": "3a7309294cd4575e60aeb5e153d346313b16f7d9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -68,11 +68,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768010798, "lastModified": 1771075454,
"narHash": "sha256-CmEy/t3CCDnUvn594sXtv0vRxt1JQaqj0nGdtQFU3mA=", "narHash": "sha256-5GlUpibCTqcXq/kCwkLHQGfjuBk2r+ZlWY0MjZo0xtE=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "cli", "repo": "cli",
"rev": "70a8624eacfc1b90fe248aef722ae708e775a927", "rev": "d890f7c3af4e7a900338bdf6400c2cf76de89a19",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -104,11 +104,11 @@
"quickshell": "quickshell" "quickshell": "quickshell"
}, },
"locked": { "locked": {
"lastModified": 1768670844, "lastModified": 1771307672,
"narHash": "sha256-6jntj2RVC3ceEFd1dWKUlLkV/UUkCfcv6KR+yBt7DgA=", "narHash": "sha256-mCSP9umAD05fp4y49rCvaNgzNol1eiQ39pNmyf5jikw=",
"owner": "AvengeMedia", "owner": "AvengeMedia",
"repo": "DankMaterialShell", "repo": "DankMaterialShell",
"rev": "27f0df07af950c378054264eda384978d95c7f80", "rev": "ef19568dd7260c07ba7ba1ca793117da28251407",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -117,16 +117,36 @@
"type": "github" "type": "github"
} }
}, },
"danksearch": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1771177088,
"narHash": "sha256-n6e4e0iHNwtdGOlkJlDR9lbFhYalLMuqeQ3jDfp1CaA=",
"owner": "AvengeMedia",
"repo": "danksearch",
"rev": "3b3b79514acf349c166ae53db2225470a28be9e6",
"type": "github"
},
"original": {
"owner": "AvengeMedia",
"repo": "danksearch",
"type": "github"
}
},
"devshell": { "devshell": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1764011051, "lastModified": 1768818222,
"narHash": "sha256-M7SZyPZiqZUR/EiiBJnmyUbOi5oE/03tCeFrTiUZchI=", "narHash": "sha256-460jc0+CZfyaO8+w8JNtlClB2n4ui1RbHfPTLkpwhU8=",
"owner": "numtide", "owner": "numtide",
"repo": "devshell", "repo": "devshell",
"rev": "17ed8d9744ebe70424659b0ef74ad6d41fc87071", "rev": "255a2b1725a20d060f566e4755dbf571bbbb5f76",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -142,11 +162,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1746728054, "lastModified": 1768920986,
"narHash": "sha256-eDoSOhxGEm2PykZFa/x9QG5eTH0MJdiJ9aR00VAofXE=", "narHash": "sha256-CNzzBsRhq7gg4BMBuTDObiWDH/rFYHEuDRVOwCcwXw4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "ff442f5d1425feb86344c028298548024f21256d", "rev": "de5708739256238fb912c62f03988815db89ec9a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -292,11 +312,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765835352, "lastModified": 1769996383,
"narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "a34fae9c08a15ad73f295041fec82323541400a9", "rev": "57928607ea566b5db3ad13af0e57e921e6b12381",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -390,11 +410,11 @@
}, },
"hardware": { "hardware": {
"locked": { "locked": {
"lastModified": 1768584846, "lastModified": 1771257191,
"narHash": "sha256-IRPmIOV2tPwxbhP/I9M5AmwhTC0lMPtoPStC+8T6xl0=", "narHash": "sha256-H1l+zHq+ZinWH7F1IidpJ2farmbfHXjaxAm1RKWE1KI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "cce68f4a54fa4e3d633358364477f5cc1d782440", "rev": "66e1a090ded57a0f88e2b381a7d4daf4a5722c3f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -410,11 +430,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768598210, "lastModified": 1771269455,
"narHash": "sha256-kkgA32s/f4jaa4UG+2f8C225Qvclxnqs76mf8zvTVPg=", "narHash": "sha256-BZ31eN5F99YH6vkc4AhzKGE+tJgJ52kl8f01K7wCs8w=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "c47b2cc64a629f8e075de52e4742de688f930dc6", "rev": "5f1d42a97b19803041434f66681d5c44c9ae62e3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -431,11 +451,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1747978958, "lastModified": 1768598210,
"narHash": "sha256-pQQnbxWpY3IiZqgelXHIe/OAE/Yv4NSQq7fch7M6nXQ=", "narHash": "sha256-kkgA32s/f4jaa4UG+2f8C225Qvclxnqs76mf8zvTVPg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "7419250703fd5eb50e99bdfb07a86671939103ea", "rev": "c47b2cc64a629f8e075de52e4742de688f930dc6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -454,11 +474,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768644786, "lastModified": 1769328881,
"narHash": "sha256-0nfqa8f7/at2hQTq5rbz69S+nmp6RzAtX0kf8OiJBrU=", "narHash": "sha256-y61NGkedVL4krfEkPCpngsYxGujCYcx+ryBGVrgeszE=",
"owner": "VirtCode", "owner": "VirtCode",
"repo": "hypr-dynamic-cursors", "repo": "hypr-dynamic-cursors",
"rev": "b92d2db9c9f045e50e4c0e97e96b88ea86f43cd3", "rev": "bf761c322dbd675399e6e33628d9fb4545c59ad3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -512,11 +532,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1766946335, "lastModified": 1770511807,
"narHash": "sha256-MRD+Jr2bY11MzNDfenENhiK6pvN+nHygxdHoHbZ1HtE=", "narHash": "sha256-suKmSbSk34uPOJDTg/GbPrKEJutzK08vj0VoTvAFBCA=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprgraphics", "repo": "hyprgraphics",
"rev": "4af02a3925b454deb1c36603843da528b67ded6c", "rev": "7c75487edd43a71b61adb01cae8326d277aab683",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -544,11 +564,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1768660279, "lastModified": 1771249510,
"narHash": "sha256-ak7mm3HiluwyMXHadoEzhrzzMGz2T1UkOVL0N0sbYUc=", "narHash": "sha256-Iql2BwsfrHiyDmZfc/9Cp6oa2569/WrJqhqWWg3EY50=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "Hyprland", "repo": "Hyprland",
"rev": "c99eb23869da2b80e3613a886aa1b99851367a3c", "rev": "661314e13487784c94b3c9fd69b469764eb6ef7b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -618,11 +638,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767723101, "lastModified": 1770899531,
"narHash": "sha256-jObY8O7OI+91hoE137APsDxm0235/Yx+HhFIip187zM=", "narHash": "sha256-UBrWjh0DR8db60aLNkTnZTJ9F4kWK0Y7rUDNJC88W7A=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-plugins",
"rev": "fef398ed5e4faf59bc43b915e46a75cfe8b16697", "rev": "e03c34ccd51280a44ea6d1f5c040cd81ecca25ed",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -672,11 +692,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1764612430, "lastModified": 1767983607,
"narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", "narHash": "sha256-8C2co8NYfR4oMOUEsPROOJ9JHrv9/ktbJJ6X1WsTbXc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "0d00dc118981531aa731150b6ea551ef037acddd", "rev": "d4037379e6057246b408bbcf796cf3e9838af5b2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -770,11 +790,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1766253372, "lastModified": 1770139857,
"narHash": "sha256-1+p4Kw8HdtMoFSmJtfdwjxM4bPxDK9yg27SlvUMpzWA=", "narHash": "sha256-bCqxcXjavgz5KBJ/1CBLqnagMMf9JvU1m9HmYVASKoc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "51a4f93ce8572e7b12b7284eb9e6e8ebf16b4be9", "rev": "9038eec033843c289b06b83557a381a2648d8fa5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -795,11 +815,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1763640274, "lastModified": 1770501770,
"narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=", "narHash": "sha256-NWRM6+YxTRv+bT9yvlhhJ2iLae1B1pNH3mAL5wi2rlQ=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671", "rev": "0bd8b6cde9ec27d48aad9e5b4deefb3746909d40",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -824,11 +844,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767473322, "lastModified": 1770203293,
"narHash": "sha256-RGOeG+wQHeJ6BKcsSB8r0ZU77g9mDvoQzoTKj2dFHwA=", "narHash": "sha256-PR/KER+yiHabFC/h1Wjb+9fR2Uy0lWM3Qld7jPVaWkk=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwire", "repo": "hyprwire",
"rev": "d5e7d6b49fe780353c1cf9a1cf39fa8970bd9d11", "rev": "37bc90eed02b0c8b5a77a0b00867baf3005cfb98",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -843,11 +863,11 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1767822991, "lastModified": 1769548169,
"narHash": "sha256-iyrn9AcPZCoyxX4OT8eMkBsjG7SRUQXXS/V1JzxS7rA=", "narHash": "sha256-03+JxvzmfwRu+5JafM0DLbxgHttOQZkUtDWBmeUkN8Y=",
"owner": "nix-community", "owner": "nix-community",
"repo": "impermanence", "repo": "impermanence",
"rev": "82e5bc4508cab9e8d5a136626276eb5bbce5e9c5", "rev": "7b1d382faf603b6d264f58627330f9faa5cba149",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -913,11 +933,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1768669983, "lastModified": 1771308899,
"narHash": "sha256-OGl180QZ1QIirJ7Cy9Tqrgn/XEglaKGBeb5pys/sS7Y=", "narHash": "sha256-kb/4oSHB261GOLhVGgrzTOqo/ImeCi/WS25q2ujtHGc=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "b90da048a6ae94b49ff489bacac4a49206670c18", "rev": "f3e98ba073bd7e2717a07d622f9b737c461a97b9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -946,11 +966,11 @@
"niri-unstable": { "niri-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1768653140, "lastModified": 1771305475,
"narHash": "sha256-8/u6/KHghsTHb3zmw8hYbwRQIp7UgMyQyqn4zVFN1S0=", "narHash": "sha256-lqweVTwHhYc+9T33cysp38gVwxaibGJHriOPZXWyhCY=",
"owner": "YaLTeR", "owner": "YaLTeR",
"repo": "niri", "repo": "niri",
"rev": "3ccb06f5644c4bcdf74ad2e4d388a13ac65207af", "rev": "a2a52911757cb3b497db9407592f9b4c439571ea",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -966,11 +986,11 @@
"nixpkgs": "nixpkgs_3" "nixpkgs": "nixpkgs_3"
}, },
"locked": { "locked": {
"lastModified": 1768475717, "lastModified": 1771150922,
"narHash": "sha256-185VOlWF4K9gzwr7M56ArjqDt6beN/5TxCYLEyVPOcs=", "narHash": "sha256-+oQJun4CFDlOQRocbZpqQDj7agoy56/4ZjT1oUR7NOs=",
"owner": "thiagokokada", "owner": "thiagokokada",
"repo": "nix-alien", "repo": "nix-alien",
"rev": "a579610c67dc946f39c2a64656699eb29eb2ffb5", "rev": "96045e886ba0dd45b27590e7c0c6e77bbb54033d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1003,11 +1023,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1765267181, "lastModified": 1771130777,
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=", "narHash": "sha256-UIKOwG0D9XVIJfNWg6+gENAvQP+7LO46eO0Jpe+ItJ0=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f", "rev": "efec7aaad8d43f8e5194df46a007456093c40f88",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1034,11 +1054,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1768484090, "lastModified": 1771208521,
"narHash": "sha256-HBIfbB9MF9oqQTxs/W5440mzVaYDBWU9tuX95aZ8h64=", "narHash": "sha256-X01Q3DgSpjeBpapoGA4rzKOn25qdKxbPnxHeMLNoHTU=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d4fa45dc2d4d32c10cb7c6b530a6b4b7d2429442", "rev": "fa56d7d6de78f5a7f997b0ea2bc6efd5868ad9e8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1066,11 +1086,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1748026106, "lastModified": 1768564909,
"narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1082,11 +1102,11 @@
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1768305791, "lastModified": 1771008912,
"narHash": "sha256-AIdl6WAn9aymeaH/NvBj0H9qM+XuAuYbGMZaP0zcXAQ=", "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1412caf7bf9e660f2f962917c14b1ea1c3bc695e", "rev": "a82ccc39b39b621151d6732718e3e250109076fa",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1098,11 +1118,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1768564909, "lastModified": 1771008912,
"narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=", "narHash": "sha256-gf2AmWVTs8lEq7z/3ZAsgnZDhWIckkb+ZnAo5RzSxJg=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f", "rev": "a82ccc39b39b621151d6732718e3e250109076fa",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1153,11 +1173,11 @@
"systems": "systems_3" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1768486009, "lastModified": 1771135771,
"narHash": "sha256-I7ymDe6UQooHy9I9wrafKCCDnRbox/EMWAgJgpm7fGs=", "narHash": "sha256-wyvBIhDuyCRyjB3yPg77qoyxrlgQtBR1rVW3c9knV3E=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "03a638205b5cb04ba9c2ed6c604e137b15f07fa1", "rev": "ed0424f0b08d303a7348f52f7850ad1b2704f9ba",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1173,11 +1193,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768675584, "lastModified": 1771320561,
"narHash": "sha256-YcQRhf1AQv0jHey5DMek5UQvkqSs+Q/yktXEm8ymaRA=", "narHash": "sha256-sM+gR+fo9HVtV27gYa4aBtT06wfg1tcyYJ8pjmQ0rRQ=",
"owner": "noctalia-dev", "owner": "noctalia-dev",
"repo": "noctalia-shell", "repo": "noctalia-shell",
"rev": "1d792b01b4cf2160000f7ef6e9388843cf5106d3", "rev": "7c210ef00e289558f6b5d01926760c3b46cd979e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1217,11 +1237,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768671781, "lastModified": 1771321196,
"narHash": "sha256-kW4mzy7wzuW+od/o3Gfg5ONO7nb7U7uUxvEkAyFd9cY=", "narHash": "sha256-I/1/nZOIFByTYZONatUpYdh/Abh2FjlQwtZ7u4r70Nw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "NUR", "repo": "NUR",
"rev": "1e87169b18457a22e6ef372789e48cd86b81e2ba", "rev": "250a13346efcfff65f490136e9705233b69d3401",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1240,11 +1260,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767281941, "lastModified": 1770726378,
"narHash": "sha256-6MkqajPICgugsuZ92OMoQcgSHnD6sJHwk8AxvMcIgTE=", "narHash": "sha256-kck+vIbGOaM/dHea7aTBxdFYpeUl/jHOy5W3eyRvVx8=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "f0927703b7b1c8d97511c4116eb9b4ec6645a0fa", "rev": "5eaaedde414f6eb1aea8b8525c466dc37bba95ae",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1308,11 +1328,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768549203, "lastModified": 1770693276,
"narHash": "sha256-DxN7v8g8DO8gGJmgBJMo3fsSR3HEs+DFCXeKeHq61zA=", "narHash": "sha256-ngXnN5YXu+f45+QGYNN/VEBMQmcBCYGRCqwaK8cxY1s=",
"owner": "quickshell-mirror", "owner": "quickshell-mirror",
"repo": "quickshell", "repo": "quickshell",
"rev": "d03c59768c680f052dff6e7a7918bbf990b0f743", "rev": "dacfa9de829ac7cb173825f593236bf2c21f637e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1325,6 +1345,7 @@
"inputs": { "inputs": {
"caelestia": "caelestia", "caelestia": "caelestia",
"dank-material-shell": "dank-material-shell", "dank-material-shell": "dank-material-shell",
"danksearch": "danksearch",
"devshell": "devshell", "devshell": "devshell",
"disko": "disko", "disko": "disko",
"hardware": "hardware", "hardware": "hardware",
@ -1395,11 +1416,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1768481291, "lastModified": 1771166946,
"narHash": "sha256-NjKtkJraCZEnLHAJxLTI+BfdU//9coAz9p5TqveZwPU=", "narHash": "sha256-UFc4lfGBr+wJmwgDGJDn1cVD6DTr0/8TdronNUiyXlU=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "e085e303dfcce21adcb5fec535d65aacb066f101", "rev": "2d0cf89b4404529778bc82de7e42b5754e0fe4fa",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1476,11 +1497,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1767427579, "lastModified": 1771103358,
"narHash": "sha256-q9aFfPohbMS6ehkQHReMeIjtld0wGiUsxlHoPRRvsp4=", "narHash": "sha256-EFU39ivrUUGBzuiwmc94Hxp5uD9hC8Qf80Esh+w8xpE=",
"owner": "adriankarlen", "owner": "adriankarlen",
"repo": "textfox", "repo": "textfox",
"rev": "29c31979e5583d9367247f0af8675f88482ff481", "rev": "e86c0a3a77cbdd8dbbca51b0c190733c8e6788e1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1568,11 +1589,11 @@
"xwayland-satellite-unstable": { "xwayland-satellite-unstable": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1768106915, "lastModified": 1771195969,
"narHash": "sha256-HlLo9zH4ULRXlmlIK948cHmdVhxyHgTHxGaoCRlW4k8=", "narHash": "sha256-BUE41HjLIGPjq3U8VXPjf8asH8GaMI7FYdgrIHKFMXA=",
"owner": "Supreeeme", "owner": "Supreeeme",
"repo": "xwayland-satellite", "repo": "xwayland-satellite",
"rev": "72245e108f3b03c3c4474d2de9de2d1830849603", "rev": "536bd32efc935bf876d6de385ec18a1b715c9358",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@ -80,6 +80,8 @@
dank-material-shell.url = "github:AvengeMedia/DankMaterialShell"; dank-material-shell.url = "github:AvengeMedia/DankMaterialShell";
dank-material-shell.inputs.nixpkgs.follows = "nixpkgs"; dank-material-shell.inputs.nixpkgs.follows = "nixpkgs";
# dank-material-shell.inputs.dgop.follows = "dgop"; # dank-material-shell.inputs.dgop.follows = "dgop";
danksearch.url = "github:AvengeMedia/danksearch";
danksearch.inputs.nixpkgs.follows = "nixpkgs";
# Hyprland (use flake so plugins are not built from source) # Hyprland (use flake so plugins are not built from source)
hyprland.url = "github:hyprwm/Hyprland"; hyprland.url = "github:hyprwm/Hyprland";

View File

@ -478,6 +478,7 @@ in
systemctl-tui systemctl-tui
restic # Backups restic # Backups
gnumake gnumake
just
# Hardware/Software info # Hardware/Software info
pciutils # lspci pciutils # lspci
@ -499,7 +500,7 @@ in
imagemagick # Convert image (magic) imagemagick # Convert image (magic)
mp3val # Validate mp3 files mp3val # Validate mp3 files
flac # Validate flac files flac # Validate flac files
spotdl # spotdl
# Document utils # Document utils
poppler-utils # pdfunite poppler-utils # pdfunite

View File

@ -133,6 +133,7 @@
godot_4 godot_4
(obs-studio.override {cudaSupport = true;}) (obs-studio.override {cudaSupport = true;})
kdePackages.kdenlive kdePackages.kdenlive
# davinci-resolve
krita krita
makemkv makemkv
lrcget lrcget
@ -141,7 +142,8 @@
jellyfin-desktop jellyfin-desktop
jellyfin-mpv-shim jellyfin-mpv-shim
# tidal-hifi # tidal-hifi
tidal-dl-ng # TODO: Borked # tidal-dl-ng # TODO: Borked
tiddl
picard picard
handbrake handbrake
teamspeak6-client teamspeak6-client

View File

@ -37,6 +37,7 @@
inputs.caelestia.homeManagerModules.default inputs.caelestia.homeManagerModules.default
inputs.dank-material-shell.homeModules.dank-material-shell inputs.dank-material-shell.homeModules.dank-material-shell
inputs.dank-material-shell.homeModules.niri inputs.dank-material-shell.homeModules.niri
inputs.danksearch.homeModules.default
# NOTE: Do NOT use this, use the system module (the HM module has to rely on fuse) # NOTE: Do NOT use this, use the system module (the HM module has to rely on fuse)
# inputs.impermanence.homeManagerModules.impermanence # inputs.impermanence.homeManagerModules.impermanence

View File

@ -69,6 +69,7 @@ in [
(mkBm "Rust" "https://doc.rust-lang.org/stable/book/ch03-00-common-programming-concepts.html") (mkBm "Rust" "https://doc.rust-lang.org/stable/book/ch03-00-common-programming-concepts.html")
(mkBm "RustOS" "https://os.phil-opp.com/") (mkBm "RustOS" "https://os.phil-opp.com/")
(mkBm "Interpreters" "https://craftinginterpreters.com/contents.html") (mkBm "Interpreters" "https://craftinginterpreters.com/contents.html")
(mkBm "Godbolt" "https://godbolt.org")
]; ];
} }
{ {

View File

@ -13,7 +13,7 @@ in {
config = lib.mkIf firefox.enable { config = lib.mkIf firefox.enable {
textfox = { textfox = {
enable = firefox.textfox; enable = firefox.textfox;
useLegacyExtensions = false; # useLegacyExtensions = false;
profiles = ["default"]; profiles = ["default"];
config = { config = {
@ -54,7 +54,9 @@ in {
}; };
}; };
home.packages = with pkgs; [vdhcoapp]; home.packages = with pkgs; [
# vdhcoapp # No longer required since VDH >= 10
];
home.sessionVariables = lib.mkMerge [ home.sessionVariables = lib.mkMerge [
{ {

View File

@ -50,6 +50,7 @@ in {
typescript typescript
vscode-langservers-extracted # includes nodejs vscode-langservers-extracted # includes nodejs
autotools-language-server autotools-language-server
just-lsp
# Linters # Linters
checkstyle # java checkstyle # java
@ -74,6 +75,8 @@ in {
rustfmt rustfmt
stylua stylua
typstyle typstyle
mbake
just-formatter
]) ])
[ [
@ -351,7 +354,7 @@ in {
clangd-extensions = rec { clangd-extensions = rec {
name = "clangd_extensions"; name = "clangd_extensions";
pkg = pkgs.vimPlugins.clangd_extensions-nvim; pkg = pkgs.vimPlugins.clangd_extensions-nvim;
lazy = true; lazy = false;
config = mkDefaultConfig name; config = mkDefaultConfig name;
opts = { opts = {
inlay_hints = { inlay_hints = {
@ -513,8 +516,10 @@ in {
html = ["prettierd" "prettier"]; html = ["prettierd" "prettier"];
java = ["google-java-format"]; java = ["google-java-format"];
javascript = ["prettierd" "prettier"]; javascript = ["prettierd" "prettier"];
just = ["just"];
latex = ["tex-fmt"]; latex = ["tex-fmt"];
lua = ["stylua"]; lua = ["stylua"];
make = ["bake"];
markdown = ["prettierd" "prettier"]; markdown = ["prettierd" "prettier"];
nix = ["alejandra"]; nix = ["alejandra"];
python = ["black"]; python = ["black"];
@ -878,6 +883,7 @@ in {
{name = "cmake";} {name = "cmake";}
{name = "cssls";} {name = "cssls";}
{name = "html";} # vscode-langservers-extracted {name = "html";} # vscode-langservers-extracted
{name = "just-lsp";} # TODO: Doesn't autostart?
{name = "lua_ls";} {name = "lua_ls";}
{ {
name = "ltex"; name = "ltex";
@ -1987,6 +1993,39 @@ in {
''; '';
}; };
visual-whitespace = rec {
name = "visual-whitespace";
pkg = pkgs.vimPlugins.visual-whitespace-nvim;
event = ["ModeChanged *:[vV\22]"];
config = mkDefaultConfig name;
opts = {
enabled = true;
highlight = {
link = "Visual";
default = true;
};
match_types = {
space = true;
tab = true;
nbsp = true;
lead = false;
trail = false;
};
list_chars = {
space = "·";
tab = "";
nbsp = "";
lead = "";
trail = "";
};
fileformat_chars = {
unix = "";
mac = "";
dos = "";
};
};
};
# wakatime = { # wakatime = {
# name = "wakatime"; # name = "wakatime";
# pkg = pkgs.vimPlugins.vim-wakatime; # pkg = pkgs.vimPlugins.vim-wakatime;
@ -2168,6 +2207,7 @@ in {
typst-preview # Typst support typst-preview # Typst support
ufo # Code folding ufo # Code folding
vimtex # LaTeX support vimtex # LaTeX support
visual-whitespace
# wakatime # Time tracking # wakatime # Time tracking
web-devicons # Icons for many plugins web-devicons # Icons for many plugins
which-key # Live keybinding help which-key # Live keybinding help

View File

@ -70,6 +70,10 @@
enabled = true; enabled = true;
id = "diskUsage"; id = "diskUsage";
} }
{
enabled = true;
id = "colorPicker";
}
{ {
enabled = true; enabled = true;
id = "clipboard"; id = "clipboard";

View File

@ -62,6 +62,7 @@ in {
# TODO: Those should be modules with their own options # TODO: Those should be modules with their own options
noctalia-shell = import ./noctalia.nix {inherit color;}; noctalia-shell = import ./noctalia.nix {inherit color;};
dank-material-shell = import ./dankMaterialShell.nix {inherit config color;}; dank-material-shell = import ./dankMaterialShell.nix {inherit config color;};
dsearch.enable = true;
# TODO: Extract options # TODO: Extract options
niri = { niri = {

View File

@ -8,6 +8,7 @@
system, system,
username, username,
headless, headless,
publicKeys,
... ...
}: }:
with mylib.networking; { with mylib.networking; {
@ -273,6 +274,10 @@ with mylib.networking; {
]; ];
shell = pkgs.fish; shell = pkgs.fish;
openssh.authorizedKeys.keys = [
publicKeys.christoph.ssh
];
# We do this with HomeManager # We do this with HomeManager
# packages = with pkgs; []; # packages = with pkgs; [];
}; };
@ -418,7 +423,9 @@ with mylib.networking; {
}; };
# Enable the OpenSSH daemon. # Enable the OpenSSH daemon.
openssh.enable = true; openssh = {
enable = true;
};
# Trims the journal if too large # Trims the journal if too large
journald.extraConfig = '' journald.extraConfig = ''

View File

@ -176,6 +176,22 @@
fileSystems = ["/"]; fileSystems = ["/"];
}; };
# Temporarily ban IPs for SSH after failed login attempts
fail2ban = {
enable = true;
};
openssh = {
ports = [5432];
settings = {
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
PermitRootLogin = "no";
AllowUsers = [username];
LogLevel = "VERBOSE"; # For fail2ban
};
};
# Keep this as a system service because we're backing up /persist as root # Keep this as a system service because we're backing up /persist as root
# TODO: The repository gets corrupted all the time, maybe because the service runs before the repository is mounted? # TODO: The repository gets corrupted all the time, maybe because the service runs before the repository is mounted?
# - Was this caused by the NFS "soft" option? # - Was this caused by the NFS "soft" option?

View File

@ -76,6 +76,9 @@
# options = ["defaults" "rw" "noatime"]; # options = ["defaults" "rw" "noatime"];
# }; # };
# Can't set this in disko
"/home".neededForBoot = true;
# NOTE: By mounting NFS shares here, we risk the system becoming unusable when they disconnect (unless unmounted). # NOTE: By mounting NFS shares here, we risk the system becoming unusable when they disconnect (unless unmounted).
# If the bg option is specified, a timeout or failure causes the mount(8) command # If the bg option is specified, a timeout or failure causes the mount(8) command

View File

@ -18,6 +18,7 @@
../services/heidi.nix ../services/heidi.nix
../services/formula10.nix ../services/formula10.nix
../services/formula11.nix ../services/formula11.nix
../services/formula12.nix
../services/statespaces.nix ../services/statespaces.nix
# General services # General services
@ -28,6 +29,7 @@
../services/gitea.nix ../services/gitea.nix
../services/immich.nix ../services/immich.nix
../services/jellyfin.nix ../services/jellyfin.nix
../services/kiwix.nix
../services/kopia.nix ../services/kopia.nix
../services/nextcloud.nix ../services/nextcloud.nix
../services/nginx-proxy-manager.nix ../services/nginx-proxy-manager.nix

View File

@ -0,0 +1,66 @@
{
config,
lib,
pkgs,
...
}: let
pocketbaseVersion = "0.33.0";
f12Version = "latest";
in {
virtualisation.oci-containers.containers = {
formula12_pocketbase = {
image = "gitea.vps.chriphost.de/christoph/pocketbase:${pocketbaseVersion}";
autoStart = true;
dependsOn = [];
ports = [
"8091:8080" # Bind for VPS
];
volumes = [
"formula12_pb_data:/pb/pb_data"
];
environment = {};
extraOptions = [
"--net=behind-nginx"
];
};
formula12 = {
image = "gitea.vps.chriphost.de/christoph/formula12:${f12Version}";
autoStart = true;
dependsOn = [
"formula12_pocketbase"
];
ports = [
# "8080:8090"
"5174:3000"
];
volumes = [];
environment = {
# PB_PROTOCOL="http";
# PB_HOST="formula11_pocketbase";
# PB_PORT="8000";
# PB_PROTOCOL="https";
# PB_URL="f11pb.vps.chriphost.de";
PUBLIC_PBURL = "https://f12pb.vps.chriphost.de";
# Required by SvelteKit to prevent cross-site POST errors
ORIGIN = "https://f12.vps.chriphost.de";
};
extraOptions = [
"--net=behind-nginx"
];
};
};
}

View File

@ -6,7 +6,7 @@
}: let }: let
vectorchordVersion = "0.4.2"; vectorchordVersion = "0.4.2";
pgvectorsVersion = "0.2.0"; pgvectorsVersion = "0.2.0";
immichVersion = "2.3.1"; immichVersion = "2.5.2";
in { in {
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
immich-database = { immich-database = {

40
system/services/kiwix.nix Normal file
View File

@ -0,0 +1,40 @@
{
config,
lib,
pkgs,
...
}: let
kiwixVersion = "3.8.1";
in {
virtualisation.oci-containers.containers = {
kiwix = {
image = "ghcr.io/kiwix/kiwix-serve:${kiwixVersion}";
autoStart = true;
dependsOn = [];
ports = [
# "8080:80"
];
volumes = [
# TODO: Add network location for .zim files
"kiwix_data:/data"
];
environment = {
PUID = "1000";
PGID = "1000";
TZ = "Europe/Berlin";
};
cmd = ["*.zim"];
extraOptions = [
# "--privileged"
# "--device=nvidia.com/gpu=all"
"--net=behind-nginx"
];
};
};
}

View File

@ -126,6 +126,7 @@ in {
# (mkUDir ".nv" m755) # Unity # (mkUDir ".nv" m755) # Unity
(mkUDir ".ollama" m755) (mkUDir ".ollama" m755)
# (mkUDir ".plastic4" m755) # Unity # (mkUDir ".plastic4" m755) # Unity
(mkUDir ".tiddl" m755)
(mkUDir ".var/app" m755) (mkUDir ".var/app" m755)
(mkUDir ".vim/undo" m755) (mkUDir ".vim/undo" m755)
(mkUDir ".zotero" m755) (mkUDir ".zotero" m755)
@ -237,6 +238,7 @@ in {
newhome newhome
]; ];
# TODO: Is this fixed with filesystems."/home".neededForBoot = true?
# NOTE: This is REQUIRED for HM activation! # NOTE: This is REQUIRED for HM activation!
# Otherwise the home directory won't be writable! # Otherwise the home directory won't be writable!
systemd.services."impermanence-fix-home-ownership" = let systemd.services."impermanence-fix-home-ownership" = let