Compare commits

...

10 Commits

Author SHA1 Message Date
262f6779b1 wip: fix(copypary): zotero webdav
All checks were successful
build / build (push) Successful in 1m36s
2026-03-29 19:05:29 -06:00
9ffa14e536 fix(jellyfin-rpc): systemd unit dependencies
All checks were successful
build / build (push) Successful in 2m44s
2026-03-29 19:05:17 -06:00
8c41e3b8df feat(gitea): set default merge style
All checks were successful
build / build (push) Successful in 6s
2026-03-28 14:21:40 -06:00
a9ac5ae964 feat(gitea): 도기 보나와 한국어 2026-03-28 14:21:40 -06:00
258c3edeab fix(emacs): o kepeken ilo Syd/handle
All checks were successful
build / build (push) Successful in 1m14s
2026-03-26 10:31:37 -06:00
5d5036a83c feat(emacs): eshell aliases from home.shellAliases
All checks were successful
build / build (push) Successful in 1m52s
2026-03-26 10:22:23 -06:00
da60eaa936 feat(bash): alias completions 2026-03-26 09:19:52 -06:00
c551e8f86e refactor: move crumb bash to msyds 2026-03-26 08:22:27 -06:00
de5b56d1b1 feat: markdown prose mode
All checks were successful
build / build (push) Successful in 3m4s
2026-03-24 20:00:08 -06:00
cbb7f3c7a7 fix: mark compilation buffer as popup 2026-03-24 19:59:42 -06:00
20 changed files with 245 additions and 47 deletions

6
flake.lock generated
View File

@@ -76,11 +76,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1762095388, "lastModified": 1774411715,
"narHash": "sha256-7Q8LtcvKWHbP8znARRTOY2tpU5WoV6FHwp5TZJOI8Us=", "narHash": "sha256-mceIHtVMXpLAfr1W0VK9ceTBX5yKu4gGWpVbThWTsAA=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "ac085b8149ff50e03d260128596dd130ed1c7cae", "rev": "26e663d111e39ca96c63702ad27a05b6736607cf",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -58,7 +58,7 @@
lldap.pam.enable = true; lldap.pam.enable = true;
nginx.enable = true; nginx.enable = true;
slskd.enable = true; slskd.enable = true;
webdav.enable = true; # webdav.enable = true;
copyparty.enable = true; copyparty.enable = true;
syncthing.enable = true; syncthing.enable = true;
cache.enable = true; cache.enable = true;

16
modules/home/bash.nix Normal file
View File

@@ -0,0 +1,16 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.bash;
in {
options.sydnix.bash = {
enable = lib.mkEnableOption "Bash";
};
imports = [
./bash/complete-alias.nix
];
config = lib.mkIf cfg.enable {
programs.bash.enable = true;
};
}

View File

@@ -0,0 +1,16 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.bash.complete-alias;
in {
options.sydnix.bash.complete-alias = {
enable = lib.mkEnableOption "Alias completion";
};
config = lib.mkIf cfg.enable {
programs.bash.initExtra = lib.mkAfter ''
. ${lib.getExe pkgs.complete-alias}
complete -F _complete_alias "''${!BASH_ALIASES[@]}"
'';
};
}

View File

@@ -77,7 +77,9 @@ in {
}; };
systemd.user.services.jellyfin-rpc = { systemd.user.services.jellyfin-rpc = {
Unit.Requires = [ "jellyfin-rpc-configure.service" ];
Unit.After = [ "jellyfin-rpc-configure.service" ]; Unit.After = [ "jellyfin-rpc-configure.service" ];
Install.WantedBy = [ "default.target" ];
Service.ExecStart = lib.getExe pkgs.jellyfin-rpc; Service.ExecStart = lib.getExe pkgs.jellyfin-rpc;
}; };

View File

@@ -0,0 +1,18 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.prism-launcher;
in {
options.sydnix.prism-launcher = {
enable = lib.mkEnableOption "Prism Launcher";
};
config = lib.mkIf cfg.enable {
home.packages = [
pkgs.prismlauncher
];
sydnix.impermanence.directories = [
".local/share/PrismLauncher"
];
};
}

View File

@@ -1,34 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.users.crumb.bash;
in {
options.sydnix.users.crumb.bash.enable = lib.mkEnableOption "Bash, à la crumb";
config = lib.mkIf cfg.enable {
programs.bash = {
enable = true;
shellOptions = [
# Correct minor typos in cd commands.
"cdspell"
"autocd"
# Extra glob power.
"extglob"
# Recursive glob w/ **.
"globstar"
# Append to history file.
"histappend"
# Require user confirmation for commands using expansion.
"histverify"
# Re-edit failed history substitutions.
"histreedit"
];
};
home.shellAliases = {
nix2json = "nix eval --impure --json --file -";
"..." = "cd ../..";
"...." = "cd ../../..";
};
};
}

View File

@@ -0,0 +1,36 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sydnix.users.msyds.bash;
in {
options.sydnix.users.msyds.bash.enable =
lib.mkEnableOption "Bash, à la msyds";
config = lib.mkIf cfg.enable {
sydnix.bash.enable = true;
sydnix.bash.complete-alias.enable = true;
programs.bash.shellOptions = [
# Correct minor typos in cd commands.
"cdspell"
# Implicitly prepend `cd` to directory names.
"autocd"
# Extra glob power.
"extglob"
# Recursive glob w/ **.
"globstar"
# Append to history file.
"histappend"
# Require user confirmation for commands using expansion.
"histverify"
# Re-edit failed history substitutions.
"histreedit"
];
home.shellAliases = {
nix2json = "nix eval --impure --json --file -";
"..." = "cd ../..";
"...." = "cd ../../..";
};
};
}

View File

@@ -31,6 +31,17 @@ in {
treesit.enable = true; treesit.enable = true;
}; };
home.sessionVariables = {
ESHELL_ALIASES_FILE = pkgs.writeText "eshell-aliases" ''
alias cdp syd-project-cd
alias jj jj --no-pager $*
${lib.concatMapAttrsStringSep
"\n"
(alias: value: "alias ${alias} ${value} $*")
config.home.shellAliases}
'';
};
sydnix.emacs = { sydnix.emacs = {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;

View File

@@ -0,0 +1,11 @@
;;;; Emacs Bookmark Format Version 1;;;; -*- coding: utf-8-emacs; mode: lisp-data -*-
;;; This format is meant to be slightly human-readable;
;;; nevertheless, you probably don't want to edit it.
;;; -*- End Of Bookmark File Format Version Stamp -*-
(("org-capture-last-stored"
(filename . "~/org/daily/2026-03-26.org")
(front-context-string . "* The significan")
(rear-context-string . "le: 2026-03-26\n\n")
(position . 89)
(last-modified 27077 32462 617656 528000))
)

View File

@@ -1,6 +1,7 @@
;;; -*- lexical-binding: t; -*- ;;; -*- lexical-binding: t; -*-
(require 'syd/base) (require 'syd/base)
(require 'syd/handle)
(require 'syd/popups) (require 'syd/popups)
(require 'syd/leader) (require 'syd/leader)
@@ -26,7 +27,8 @@
cider-doc-buffer) cider-doc-buffer)
(defun syd-clojure-eval-region (beg end) (defun syd-clojure-eval-region (beg end)
(cider-eval-region beg end)) (cider-eval-region beg end))
(syd-handle '(clojure-mode clojurescript-mode cider-repl-mode) (syd-handle '(clojure-mode clojurescript-mode cider-repl-mode
cider-clojure-interaction-mode)
:docs #'cider-doc :docs #'cider-doc
:eval-region #'syd-clojure-eval-region :eval-region #'syd-clojure-eval-region
:load-buffer #'cider-load-buffer) :load-buffer #'cider-load-buffer)

View File

@@ -1,4 +1,7 @@
;;; -*- lexical-binding: t -*- ;; -*- lexical-binding: t -*-
(require 'syd/base)
(require 'syd/popups)
(setq (setq
;; Log native-compiler warnings, but don't display the buffer. Most of the ;; Log native-compiler warnings, but don't display the buffer. Most of the
@@ -8,4 +11,7 @@
;; Scroll compilation buffer to follow output. ;; Scroll compilation buffer to follow output.
compilation-scroll-output t) compilation-scroll-output t)
(syd-push shackle-rules
'("*compilation*" :select nil :size 0.42 :popup t :align bottom))
(provide 'syd/compilation) (provide 'syd/compilation)

View File

@@ -150,7 +150,9 @@ if FILE-NAME has no TRAMP prefix."
(eshell-last-dir-ring-file-name (file-name-concat (eshell-last-dir-ring-file-name (file-name-concat
syd-eshell-data-dir "lastdir")) syd-eshell-data-dir "lastdir"))
(eshell-prompt-function #'syd-eshell--prompt-fn) (eshell-prompt-function #'syd-eshell--prompt-fn)
(eshell-prompt-regexp syd-eshell--prompt-regexp)) (eshell-prompt-regexp syd-eshell--prompt-regexp)
(eshell-aliases-file (or (getenv "ESHELL_ALIASES_FILE")
eshell-aliases-file)))
:general :general
(:keymaps 'syd-leader-open-map (:keymaps 'syd-leader-open-map
"e" #'syd-toggle-eshell) "e" #'syd-toggle-eshell)

View File

@@ -0,0 +1,9 @@
;; -*- lexical-binding: t; -*-
(require 'syd/base)
(use-package markdown-mode
:config
(add-hook 'markdown-mode-hook #'syd-prose-mode))
(provide 'syd/markdown)

View File

@@ -0,0 +1 @@
nil

View File

@@ -13,10 +13,14 @@ in {
}; };
}; };
imports = [ ./copyparty/vault.nix ]; imports = [
./copyparty/vault.nix
./copyparty/webdav.nix
];
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
sydnix.deertopia.copyparty.vault.enable = true; sydnix.deertopia.copyparty.vault.enable = true;
sydnix.deertopia.copyparty.webdav.enable = true;
sydnix.impermanence.directories = [ sydnix.impermanence.directories = [
"/var/lib/copyparty" "/var/lib/copyparty"
@@ -29,8 +33,8 @@ in {
"media" "media"
]; ];
# HACK: Make files created by copyparty.service initialise with the mode # HACK: Make files created by copyparty.service initialise with
# 775. # the mode 775.
systemd.services.copyparty.serviceConfig.UMask = lib.mkForce "002"; systemd.services.copyparty.serviceConfig.UMask = lib.mkForce "002";
services.copyparty = { services.copyparty = {
@@ -56,7 +60,7 @@ in {
"/Media library" = { "/Media library" = {
path = "/media/library"; path = "/media/library";
# View and upload, but no deleting. # View and upload, but no deleting.
access.rw = "*"; access.r = "*";
access.rwmd = "@jellyfin-admin"; access.rwmd = "@jellyfin-admin";
}; };
"/Torrents" = { "/Torrents" = {

View File

@@ -36,6 +36,12 @@ in {
access.A = [ "msyds" ]; access.A = [ "msyds" ];
access.rwmd = [ "zotero" ]; access.rwmd = [ "zotero" ];
}; };
"/msyds/zotero-root" = {
path = "/vault/msyds/zotero-root";
flags.daw = true;
access.A = [ "msyds" ];
access.rwmd = [ "zotero" ];
};
"/~msyds/public" = { "/~msyds/public" = {
path = "/vault/~msyds/public"; path = "/vault/~msyds/public";
access.A = [ "msyds" ]; access.A = [ "msyds" ];

View File

@@ -0,0 +1,57 @@
{ config, lib, pkgs, ... }:
let cfg = config.sydnix.deertopia.copyparty.webdav;
in {
options.sydnix.deertopia.copyparty.webdav = {
enable = lib.mkEnableOption "WebDAV via copyparty";
port = lib.mkOption {
type = lib.types.port;
description = ''
Port on which Copyparty shall listen for WebDAV traffic.
'';
default = 3924;
};
};
# https://github.com/9001/copyparty/issues/1142
config = lib.mkIf cfg.enable {
services.copyparty.settings = {
rproxy = -1;
xff-src = "lan";
daw = true;
dav-auth = true;
ihead = "*";
ohead = "*";
dav-port = cfg.port;
};
services.authelia.instances.deertopia.settings =
lib.mkIf config.sydnix.deertopia.authelia.enable {
access_control.rules = lib.mkBefore [
{
domain = "dav.deertopia.net";
policy = "bypass";
methods = [ "OPTIONS" "PROPFIND" ];
}
];
};
sydnix.deertopia.nginx.vhosts."dav" = {
directory = null;
vhost = {
forceSSL = true;
enableACME = true;
extraConfig = ''
include ${../authelia/authelia-location.conf};
# Increase limit of upload sizes.
client_max_body_size 20G;
'';
locations."/".extraConfig = ''
include ${../authelia/authelia-authrequest.conf};
include ${../authelia/proxy.conf};
proxy_pass http://localhost:${builtins.toString cfg.port};
'';
};
};
};
}

View File

@@ -1,6 +1,8 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
let cfg = config.sydnix.deertopia.gitea; let
cfg = config.sydnix.deertopia.gitea;
commas = lib.concatStringsSep ",";
in { in {
options.sydnix.deertopia.gitea = { options.sydnix.deertopia.gitea = {
enable = lib.mkEnableOption "Gitea"; enable = lib.mkEnableOption "Gitea";
@@ -62,6 +64,38 @@ in {
DISABLE_REGISTRATION = true; DISABLE_REGISTRATION = true;
ENABLE_NOTIFY_MAIL = true; ENABLE_NOTIFY_MAIL = true;
}; };
"repository.pull-request" = {
CLOSE_KEYWORDS = commas [
# en
"close" "closes" "closed" "fix" "fixes" "fixed" "resolve"
"resolves" "resolved"
# tok
"pini e"
# ko
"" "" ""
"" "" "" "" ""
"" "" "" "" ""
];
REOPEN_KEYWORDS = commas [
# en
"reopen" "reopens" "reopened"
# tok
"open sin e" "pakala sin e"
"li pakala sin" "li pakalan sin"
# ko
"" "" " " " " " "
" "
];
WORK_IN_PROGRESS_PREFIXES = commas [
# en
"WIP:" "[WIP]"
# tok
"pini ala:" "awen pali:"
# ko
" :" ":" ":" "[]" ":" "[]"
];
DEFAULT_MERGE_STYLE = "rebase";
};
mailer = { mailer = {
ENABLED = true; ENABLED = true;
FROM = "Gitea <no-reply@deertopia.net>"; FROM = "Gitea <no-reply@deertopia.net>";

View File

@@ -46,13 +46,13 @@
kdeconnect.enable = true; kdeconnect.enable = true;
qalculate.enable = true; qalculate.enable = true;
toki-pona.enable = true; toki-pona.enable = true;
prism-launcher.enable = true;
sops = { sops = {
enable = true; enable = true;
keyFile = "/persist/private-keys/age/crumb"; keyFile = "/persist/private-keys/age/crumb";
}; };
# Personal configurations. # Personal configurations.
users.crumb = { users.crumb = {
bash.enable = true;
direnv.enable = true; direnv.enable = true;
git.enable = true; git.enable = true;
nvim.enable = true; nvim.enable = true;
@@ -68,6 +68,7 @@
}; };
users.msyds = { users.msyds = {
discord.enable = true; discord.enable = true;
bash.enable = true;
hunspell.enable = true; hunspell.enable = true;
emacs.enable = true; emacs.enable = true;
impermanence.enable = true; impermanence.enable = true;