diff --git a/configuration.nix b/configuration.nix index 43bb3be..1060df1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -140,7 +140,18 @@ nixpkgs.config.allowUnfree = true; - nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nix = { + settings = { + experimental-features = [ "nix-command" "flakes" ]; + substitute = true; + substituters = [ + "https://yazi.cachix.org" + ]; + trusted-public-keys = [ + "yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k=" + ]; + }; + }; programs.bash.shellInit = '' source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh diff --git a/git-crypt/secrets.nix b/git-crypt/secrets.nix index 8260cd7..f356638 100644 Binary files a/git-crypt/secrets.nix and b/git-crypt/secrets.nix differ diff --git a/home-modules/calendar-campuszeit-fix.nix b/home-modules/calendar-campuszeit-fix.nix new file mode 100644 index 0000000..d15769f --- /dev/null +++ b/home-modules/calendar-campuszeit-fix.nix @@ -0,0 +1,58 @@ +{ pkgs, user, ... }: +{ + home.packages = let + u = pkgs.writers.writePython3Bin "nx_fix_campuszeit_python" { + flakeIgnore = [ "E302" "E305" "E226" "E501" ]; + } /* python */ '' +import os +import sys + +def replace_campus_timezone(directory): + if not os.path.isdir(directory): + print(f"Error: {directory} is not a valid directory.") + return + + for filename in os.listdir(directory): + filepath = os.path.join(directory, filename) + if not os.path.isfile(filepath): + continue + + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + + if 'TZID:Europe/Berlin' in content or 'TZID="Europe/Berlin"' in content: + # Remove VTIMEZONE block for CampusNetZeit (optional depending on needs) + # Use a regex if multiple VTIMEZONE blocks may exist + start_idx = content.find('BEGIN:VTIMEZONE') + end_idx = content.find('END:VTIMEZONE', start_idx) + if start_idx != -1 and end_idx != -1: + content = content[:start_idx] + content[end_idx + len('END:VTIMEZONE\n'):] + + # Replace all TZID references + content = content.replace('TZID:Europe/Berlin', 'TZID:Europe/Berlin') + content = content.replace('TZID="Europe/Berlin"', 'TZID="Europe/Berlin"') + + with open(filepath, 'w', encoding='utf-8') as f: + f.write(content) + + print(f"Updated time zone in: {filename}") + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage: python replace_timezone.py ") + else: + replace_campus_timezone(sys.argv[1]) +''; + in [ + (pkgs.writeShellApplication { + name = "nx_fix_campuszeit"; + text = /*bash*/ '' + echo CHANGING OWNERSHIP OF "$(realpath "$1")" RECURSIVELY + read -r -p "Continue?" + sudo chown -R ${user} "$1" + ${u}/bin/nx_fix_campuszeit_python "$1" + sudo chown -R radicale "$1" + ''; + }) + ]; +} diff --git a/home-modules/chatterino.nix b/home-modules/chatterino.nix index 1b5dff4..5853b2b 100644 --- a/home-modules/chatterino.nix +++ b/home-modules/chatterino.nix @@ -1,4 +1,4 @@ -{ pkgs, rice, secrets, ... }: +{ config, pkgs, rice, user, secrets, ... }: let channels = [ "Caedrel" @@ -43,8 +43,14 @@ let }; }; in { + sops.secrets."streamlink/twitch-oauth" = { path = "%r/secrets/streamlink/twich-oauth"; }; + home = { - packages = with pkgs; [ chatterino2 ]; + packages = with pkgs; [ + chatterino2 + streamlink + mpv + ]; file = { ".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; /* json */ '' { @@ -76,10 +82,8 @@ in { "showUptime": true, "showViewerCount": true }, - "tabVisibility": 1, - "theme": { - "name": "nxtheme.json" - } + "tabVisibility": 0, + "theme": { "name": "nxtheme.json" } }, "behaviour": { "pauseOnHoverDuration": 5.0, @@ -93,615 +97,87 @@ in { }, "highlighting": { "badges": [ - { - "alert": false, - "color": "#7f7f3f49", - "displayName": "Broadcaster", - "name": "broadcaster", - "showInMentions": false, - "sound": false, - "soundUrl": "" - }, - { - "alert": false, - "color": "#7f7f3f49", - "displayName": "Admin", - "name": "admin", - "showInMentions": false, - "sound": false, - "soundUrl": "" - }, - { - "alert": false, - "color": "#7f7f3f49", - "displayName": "Staff", - "name": "staff", - "showInMentions": false, - "sound": false, - "soundUrl": "" - }, - { - "alert": false, - "displayName": "Moderator", - "name": "moderator", - "showInMentions": false, - "sound": false, - "soundUrl": "" - }, - { - "alert": false, - "color": "#7f7f3578", - "displayName": "VIP", - "name": "vip", - "showInMentions": false, - "sound": false, - "soundUrl": "" - } + { "alert": false, "color": "#7f7f3f49", "displayName": "Broadcaster", "name": "broadcaster", "showInMentions": false, "sound": false, "soundUrl": "" }, + { "alert": false, "color": "#7f7f3f49", "displayName": "Admin", "name": "admin", "showInMentions": false, "sound": false, "soundUrl": "" }, + { "alert": false, "color": "#7f7f3f49", "displayName": "Staff", "name": "staff", "showInMentions": false, "sound": false, "soundUrl": "" }, + { "alert": false, "displayName": "Moderator", "name": "moderator", "showInMentions": false, "sound": false, "soundUrl": "" }, + { "alert": false, "color": "#7f7f3578", "displayName": "VIP", "name": "vip", "showInMentions": false, "sound": false, "soundUrl": "" } ], - "selfMessageHighlight": { - "color": "#73008cff", - "enabled": true - } + "selfMessageHighlight": { "color": "#73008cff", "enabled": true } }, "hotkeys": { - "addedDefaults": [ - "change channel", - "close popup window", - "create clip", - "delete", - "emote picker", - "focus down", - "focus left", - "focus right", - "focus up", - "go to end of input", - "go to end of input with selection", - "go to start of input", - "go to start of input with selection", - "new popup window", - "new popup window from tab", - "new split", - "new tab", - "next message", - "open debug popup", - "open quick switcher", - "open settings", - "popup accept", - "popup focus search box", - "popup reject", - "popup scroll down", - "popup scroll up", - "popup select last tab", - "popup select next tab", - "popup select previous tab", - "popup select tab #1", - "popup select tab #2", - "popup select tab #3", - "popup select tab #4", - "popup select tab #5", - "popup select tab #6", - "popup select tab #7", - "popup select tab #8", - "previous message", - "reconnect", - "reload emotes", - "remove tab", - "reopen split", - "scroll page down", - "scroll page up", - "scroll to bottom", - "scroll to top", - "select last tab", - "select next tab", - "select previous tab", - "select tab #1", - "select tab #2", - "select tab #3", - "select tab #4", - "select tab #5", - "select tab #6", - "select tab #7", - "select tab #8", - "send message", - "send message and keep text", - "show global search", - "show search", - "toggle live tabs only", - "toggle local r9k", - "toggle tab visibility", - "zoom in", - "zoom out", - "zoom reset" - ], - "change channel": { - "action": "changeChannel", - "arguments": [], - "category": "split", - "keySequence": "Ctrl+R" - }, - "close popup window": { - "action": "delete", - "arguments": [], - "category": "popupWindow", - "keySequence": "Esc" - }, - "create clip": { - "action": "createClip", - "arguments": [], - "category": "split", - "keySequence": "Alt+X" - }, - "delete": { - "action": "delete", - "arguments": [], - "category": "split", - "keySequence": "Ctrl+W" - }, - "emote picker": { - "action": "openEmotesPopup", - "arguments": [], - "category": "splitInput", - "keySequence": "Ctrl+E" - }, - "focus down": { - "action": "focus", - "arguments": [ - "down" - ], - "category": "split", - "keySequence": "Alt+Down" - }, - "focus left": { - "action": "focus", - "arguments": [ - "left" - ], - "category": "split", - "keySequence": "Alt+Left" - }, - "focus right": { - "action": "focus", - "arguments": [ - "right" - ], - "category": "split", - "keySequence": "Alt+Right" - }, - "focus up": { - "action": "focus", - "arguments": [ - "up" - ], - "category": "split", - "keySequence": "Alt+Up" - }, - "go to end of input": { - "action": "cursorToEnd", - "arguments": [ - "withoutSelection" - ], - "category": "splitInput", - "keySequence": "End" - }, - "go to end of input with selection": { - "action": "cursorToEnd", - "arguments": [ - "withSelection" - ], - "category": "splitInput", - "keySequence": "Shift+End" - }, - "go to start of input": { - "action": "cursorToStart", - "arguments": [ - "withoutSelection" - ], - "category": "splitInput", - "keySequence": "Home" - }, - "go to start of input with selection": { - "action": "cursorToStart", - "arguments": [ - "withSelection" - ], - "category": "splitInput", - "keySequence": "Shift+Home" - }, - "new popup window": { - "action": "popup", - "arguments": [ - "split" - ], - "category": "window", - "keySequence": "Ctrl+N" - }, - "new popup window from tab": { - "action": "popup", - "arguments": [ - "window" - ], - "category": "window", - "keySequence": "Ctrl+Shift+N" - }, - "new split": { - "action": "newSplit", - "arguments": [], - "category": "window", - "keySequence": "Ctrl+T" - }, - "new tab": { - "action": "newTab", - "arguments": [], - "category": "window", - "keySequence": "Ctrl+Shift+T" - }, - "next message": { - "action": "nextMessage", - "arguments": [], - "category": "splitInput", - "keySequence": "Down" - }, - "open debug popup": { - "action": "debug", - "arguments": [], - "category": "split", - "keySequence": "F10" - }, - "open quick switcher": { - "action": "openQuickSwitcher", - "arguments": [], - "category": "window", - "keySequence": "Ctrl+K" - }, - "open settings": { - "action": "openSettings", - "arguments": [], - "category": "window", - "keySequence": "Ctrl+P" - }, - "popup accept": { - "action": "accept", - "arguments": [], - "category": "popupWindow", - "keySequence": "Return" - }, - "popup focus search box": { - "action": "search", - "arguments": [], - "category": "popupWindow", - "keySequence": "Ctrl+F" - }, - "popup reject": { - "action": "reject", - "arguments": [], - "category": "popupWindow", - "keySequence": "Esc" - }, - "popup scroll down": { - "action": "scrollPage", - "arguments": [ - "down" - ], - "category": "popupWindow", - "keySequence": "PgDown" - }, - "popup scroll up": { - "action": "scrollPage", - "arguments": [ - "up" - ], - "category": "popupWindow", - "keySequence": "PgUp" - }, - "popup select last tab": { - "action": "openTab", - "arguments": [ - "last" - ], - "category": "popupWindow", - "keySequence": "Ctrl+9" - }, - "popup select next tab": { - "action": "openTab", - "arguments": [ - "next" - ], - "category": "popupWindow", - "keySequence": "Ctrl+Tab" - }, - "popup select previous tab": { - "action": "openTab", - "arguments": [ - "previous" - ], - "category": "popupWindow", - "keySequence": "Ctrl+Shift+Tab" - }, - "popup select tab #1": { - "action": "openTab", - "arguments": [ - "0" - ], - "category": "popupWindow", - "keySequence": "Ctrl+1" - }, - "popup select tab #2": { - "action": "openTab", - "arguments": [ - "1" - ], - "category": "popupWindow", - "keySequence": "Ctrl+2" - }, - "popup select tab #3": { - "action": "openTab", - "arguments": [ - "2" - ], - "category": "popupWindow", - "keySequence": "Ctrl+3" - }, - "popup select tab #4": { - "action": "openTab", - "arguments": [ - "3" - ], - "category": "popupWindow", - "keySequence": "Ctrl+4" - }, - "popup select tab #5": { - "action": "openTab", - "arguments": [ - "4" - ], - "category": "popupWindow", - "keySequence": "Ctrl+5" - }, - "popup select tab #6": { - "action": "openTab", - "arguments": [ - "5" - ], - "category": "popupWindow", - "keySequence": "Ctrl+6" - }, - "popup select tab #7": { - "action": "openTab", - "arguments": [ - "6" - ], - "category": "popupWindow", - "keySequence": "Ctrl+7" - }, - "popup select tab #8": { - "action": "openTab", - "arguments": [ - "7" - ], - "category": "popupWindow", - "keySequence": "Ctrl+8" - }, - "previous message": { - "action": "previousMessage", - "arguments": [], - "category": "splitInput", - "keySequence": "Up" - }, - "reconnect": { - "action": "reconnect", - "arguments": [], - "category": "split", - "keySequence": "Ctrl+F5" - }, - "reload emotes": { - "action": "reloadEmotes", - "arguments": [], - "category": "split", - "keySequence": "F5" - }, - "remove tab": { - "action": "removeTab", - "arguments": [], - "category": "window", - "keySequence": "Ctrl+Shift+W" - }, - "reopen split": { - "action": "reopenSplit", - "arguments": [], - "category": "window", - "keySequence": "Ctrl+G" - }, - "scroll page down": { - "action": "scrollPage", - "arguments": [ - "down" - ], - "category": "split", - "keySequence": "PgDown" - }, - "scroll page up": { - "action": "scrollPage", - "arguments": [ - "up" - ], - "category": "split", - "keySequence": "PgUp" - }, - "scroll to bottom": { - "action": "scrollToBottom", - "arguments": [], - "category": "split", - "keySequence": "Ctrl+End" - }, - "scroll to top": { - "action": "scrollToTop", - "arguments": [], - "category": "split", - "keySequence": "Ctrl+Home" - }, - "select last tab": { - "action": "openTab", - "arguments": [ - "last" - ], - "category": "window", - "keySequence": "Ctrl+9" - }, - "select next tab": { - "action": "openTab", - "arguments": [ - "next" - ], - "category": "window", - "keySequence": "Ctrl+Tab" - }, - "select previous tab": { - "action": "openTab", - "arguments": [ - "previous" - ], - "category": "window", - "keySequence": "Ctrl+Shift+Tab" - }, - "select tab #1": { - "action": "openTab", - "arguments": [ - "0" - ], - "category": "window", - "keySequence": "Ctrl+1" - }, - "select tab #2": { - "action": "openTab", - "arguments": [ - "1" - ], - "category": "window", - "keySequence": "Ctrl+2" - }, - "select tab #3": { - "action": "openTab", - "arguments": [ - "2" - ], - "category": "window", - "keySequence": "Ctrl+3" - }, - "select tab #4": { - "action": "openTab", - "arguments": [ - "3" - ], - "category": "window", - "keySequence": "Ctrl+4" - }, - "select tab #5": { - "action": "openTab", - "arguments": [ - "4" - ], - "category": "window", - "keySequence": "Ctrl+5" - }, - "select tab #6": { - "action": "openTab", - "arguments": [ - "5" - ], - "category": "window", - "keySequence": "Ctrl+6" - }, - "select tab #7": { - "action": "openTab", - "arguments": [ - "6" - ], - "category": "window", - "keySequence": "Ctrl+7" - }, - "select tab #8": { - "action": "openTab", - "arguments": [ - "7" - ], - "category": "window", - "keySequence": "Ctrl+8" - }, - "send message": { - "action": "sendMessage", - "arguments": [], - "category": "splitInput", - "keySequence": "Return" - }, - "send message and keep text": { - "action": "sendMessage", - "arguments": [ - "keepInput" - ], - "category": "splitInput", - "keySequence": "Ctrl+Return" - }, - "show global search": { - "action": "showGlobalSearch", - "arguments": [], - "category": "split", - "keySequence": "Ctrl+Shift+F" - }, - "show search": { - "action": "showSearch", - "arguments": [], - "category": "split", - "keySequence": "Ctrl+F" - }, - "toggle live tabs only": { - "action": "setTabVisibility", - "arguments": [ - "toggleLiveOnly" - ], - "category": "window", - "keySequence": "Ctrl+Shift+L" - }, - "toggle local r9k": { - "action": "toggleLocalR9K", - "arguments": [], - "category": "window", - "keySequence": "Ctrl+H" - }, - "toggle tab visibility": { - "action": "setTabVisibility", - "arguments": [ - "toggle" - ], - "category": "window", - "keySequence": "Ctrl+U" - }, - "zoom in": { - "action": "zoom", - "arguments": [ - "in" - ], - "category": "window", - "keySequence": "Ctrl++" - }, - "zoom out": { - "action": "zoom", - "arguments": [ - "out" - ], - "category": "window", - "keySequence": "Ctrl+-" - }, - "zoom reset": { - "action": "zoom", - "arguments": [ - "reset" - ], - "category": "window", - "keySequence": "Ctrl+0" - } + "addedDefaults": [ "change channel", "close popup window", "create clip", "delete", "emote picker", "focus down", "focus left", "focus right", "focus up", "go to end of input", "go to end of input with selection", "go to start of input", "go to start of input with selection", "new popup window", "new popup window from tab", "new split", "new tab", "next message", "open debug popup", "open quick switcher", "open settings", "popup accept", "popup focus search box", "popup reject", "popup scroll down", "popup scroll up", "popup select last tab", "popup select next tab", "popup select previous tab", "popup select tab #1", "popup select tab #2", "popup select tab #3", "popup select tab #4", "popup select tab #5", "popup select tab #6", "popup select tab #7", "popup select tab #8", "previous message", "reconnect", "reload emotes", "remove tab", "reopen split", "scroll page down", "scroll page up", "scroll to bottom", "scroll to top", "select last tab", "select next tab", "select previous tab", "select tab #1", "select tab #2", "select tab #3", "select tab #4", "select tab #5", "select tab #6", "select tab #7", "select tab #8", "send message", "send message and keep text", "show global search", "show search", "toggle live tabs only", "toggle local r9k", "toggle tab visibility", "zoom in", "zoom out", "zoom reset" ], + + "change channel": { "action": "changeChannel", "arguments": [], "category": "split", "keySequence": "Ctrl+R" }, + "close popup window": { "action": "delete", "arguments": [], "category": "popupWindow", "keySequence": "Esc" }, + "create clip": { "action": "createClip", "arguments": [], "category": "split", "keySequence": "Alt+X" }, + "delete": { "action": "delete", "arguments": [], "category": "split", "keySequence": "Ctrl+W" }, + "emote picker": { "action": "openEmotesPopup", "arguments": [], "category": "splitInput", "keySequence": "Ctrl+E" }, + "focus down": { "action": "focus", "arguments": [ "down" ], "category": "split", "keySequence": "Alt+Down" }, + "focus left": { "action": "focus", "arguments": [ "left" ], "category": "split", "keySequence": "Alt+Left" }, + "focus right": { "action": "focus", "arguments": [ "right" ], "category": "split", "keySequence": "Alt+Right" }, + "focus up": { "action": "focus", "arguments": [ "up" ], "category": "split", "keySequence": "Alt+Up" }, + "go to end of input": { "action": "cursorToEnd", "arguments": [ "withoutSelection" ], "category": "splitInput", "keySequence": "End" }, + "go to end of input with selection": { "action": "cursorToEnd", "arguments": [ "withSelection" ], "category": "splitInput", "keySequence": "Shift+End" }, + "go to start of input": { "action": "cursorToStart", "arguments": [ "withoutSelection" ], "category": "splitInput", "keySequence": "Home" }, + "go to start of input with selection": { "action": "cursorToStart", "arguments": [ "withSelection" ], "category": "splitInput", "keySequence": "Shift+Home" }, + "new popup window": { "action": "popup", "arguments": [ "split" ], "category": "window", "keySequence": "Ctrl+N" }, + "new popup window from tab": { "action": "popup", "arguments": [ "window" ], "category": "window", "keySequence": "Ctrl+Shift+N" }, + "new split": { "action": "newSplit", "arguments": [], "category": "window", "keySequence": "Ctrl+T" }, + "new tab": { "action": "newTab", "arguments": [], "category": "window", "keySequence": "Ctrl+Shift+T" }, + "next message": { "action": "nextMessage", "arguments": [], "category": "splitInput", "keySequence": "Down" }, + "open debug popup": { "action": "debug", "arguments": [], "category": "split", "keySequence": "F10" }, + "open quick switcher": { "action": "openQuickSwitcher", "arguments": [], "category": "window", "keySequence": "Ctrl+K" }, + "open settings": { "action": "openSettings", "arguments": [], "category": "window", "keySequence": "Ctrl+P" }, + "popup accept": { "action": "accept", "arguments": [], "category": "popupWindow", "keySequence": "Return" }, + "popup focus search box": { "action": "search", "arguments": [], "category": "popupWindow", "keySequence": "Ctrl+F" }, + "popup reject": { "action": "reject", "arguments": [], "category": "popupWindow", "keySequence": "Esc" }, + "popup scroll down": { "action": "scrollPage", "arguments": [ "down" ], "category": "popupWindow", "keySequence": "PgDown" }, + "popup scroll up": { "action": "scrollPage", "arguments": [ "up" ], "category": "popupWindow", "keySequence": "PgUp" }, + "popup select last tab": { "action": "openTab", "arguments": [ "last" ], "category": "popupWindow", "keySequence": "Ctrl+9" }, + "popup select next tab": { "action": "openTab", "arguments": [ "next" ], "category": "popupWindow", "keySequence": "Ctrl+Tab" }, + "popup select previous tab": { "action": "openTab", "arguments": [ "previous" ], "category": "popupWindow", "keySequence": "Ctrl+Shift+Tab" }, + "popup select tab #1": { "action": "openTab", "arguments": [ "0" ], "category": "popupWindow", "keySequence": "Ctrl+1" }, + "popup select tab #2": { "action": "openTab", "arguments": [ "1" ], "category": "popupWindow", "keySequence": "Ctrl+2" }, + "popup select tab #3": { "action": "openTab", "arguments": [ "2" ], "category": "popupWindow", "keySequence": "Ctrl+3" }, + "popup select tab #4": { "action": "openTab", "arguments": [ "3" ], "category": "popupWindow", "keySequence": "Ctrl+4" }, + "popup select tab #5": { "action": "openTab", "arguments": [ "4" ], "category": "popupWindow", "keySequence": "Ctrl+5" }, + "popup select tab #6": { "action": "openTab", "arguments": [ "5" ], "category": "popupWindow", "keySequence": "Ctrl+6" }, + "popup select tab #7": { "action": "openTab", "arguments": [ "6" ], "category": "popupWindow", "keySequence": "Ctrl+7" }, + "popup select tab #8": { "action": "openTab", "arguments": [ "7" ], "category": "popupWindow", "keySequence": "Ctrl+8" }, + "previous message": { "action": "previousMessage", "arguments": [], "category": "splitInput", "keySequence": "Up" }, + "reconnect": { "action": "reconnect", "arguments": [], "category": "split", "keySequence": "Ctrl+F5" }, + "reload emotes": { "action": "reloadEmotes", "arguments": [], "category": "split", "keySequence": "F5" }, + "remove tab": { "action": "removeTab", "arguments": [], "category": "window", "keySequence": "Ctrl+Shift+W" }, + "reopen split": { "action": "reopenSplit", "arguments": [], "category": "window", "keySequence": "Ctrl+G" }, + "scroll page down": { "action": "scrollPage", "arguments": [ "down" ], "category": "split", "keySequence": "PgDown" }, + "scroll page up": { "action": "scrollPage", "arguments": [ "up" ], "category": "split", "keySequence": "PgUp" }, + "scroll to bottom": { "action": "scrollToBottom", "arguments": [], "category": "split", "keySequence": "Ctrl+End" }, + "scroll to top": { "action": "scrollToTop", "arguments": [], "category": "split", "keySequence": "Ctrl+Home" }, + "select last tab": { "action": "openTab", "arguments": [ "last" ], "category": "window", "keySequence": "Ctrl+9" }, + "select next tab": { "action": "openTab", "arguments": [ "next" ], "category": "window", "keySequence": "Ctrl+Tab" }, + "select previous tab": { "action": "openTab", "arguments": [ "previous" ], "category": "window", "keySequence": "Ctrl+Shift+Tab" }, + "select tab #1": { "action": "openTab", "arguments": [ "0" ], "category": "window", "keySequence": "Ctrl+1" }, + "select tab #2": { "action": "openTab", "arguments": [ "1" ], "category": "window", "keySequence": "Ctrl+2" }, + "select tab #3": { "action": "openTab", "arguments": [ "2" ], "category": "window", "keySequence": "Ctrl+3" }, + "select tab #4": { "action": "openTab", "arguments": [ "3" ], "category": "window", "keySequence": "Ctrl+4" }, + "select tab #5": { "action": "openTab", "arguments": [ "4" ], "category": "window", "keySequence": "Ctrl+5" }, + "select tab #6": { "action": "openTab", "arguments": [ "5" ], "category": "window", "keySequence": "Ctrl+6" }, + "select tab #7": { "action": "openTab", "arguments": [ "6" ], "category": "window", "keySequence": "Ctrl+7" }, + "select tab #8": { "action": "openTab", "arguments": [ "7" ], "category": "window", "keySequence": "Ctrl+8" }, + "send message": { "action": "sendMessage", "arguments": [], "category": "splitInput", "keySequence": "Return" }, + "send message and keep text": { "action": "sendMessage", "arguments": [ "keepInput" ], "category": "splitInput", "keySequence": "Ctrl+Return" }, + "show global search": { "action": "showGlobalSearch", "arguments": [], "category": "split", "keySequence": "Ctrl+Shift+F" }, + "show search": { "action": "showSearch", "arguments": [], "category": "split", "keySequence": "Ctrl+F" }, + "toggle live tabs only": { "action": "setTabVisibility", "arguments": [ "toggleLiveOnly" ], "category": "window", "keySequence": "Ctrl+Shift+L" }, + "toggle local r9k": { "action": "toggleLocalR9K", "arguments": [], "category": "window", "keySequence": "Ctrl+H" }, + "toggle tab visibility": { "action": "setTabVisibility", "arguments": [ "toggle" ], "category": "window", "keySequence": "Ctrl+U" }, + "zoom in": { "action": "zoom", "arguments": [ "in" ], "category": "window", "keySequence": "Ctrl++" }, + "zoom out": { "action": "zoom", "arguments": [ "out" ], "category": "window", "keySequence": "Ctrl+-" }, + "zoom reset": { "action": "zoom", "arguments": [ "reset" ], "category": "window", "keySequence": "Ctrl+0" } }, "misc": { - "currentVersion": "2.5.1", + "currentVersion": "2.5.3", "lockNotebookLayout": false }, "similarity": { @@ -713,6 +189,12 @@ in { "ui": { "lastSelectChannelTab": 0, "lastSelectIrcConn": -1 + }, + "external": { + "streamlink": { + "quality": "", + "options": "--config /home/${user}/.config/streamlink/config" + } } } ''; @@ -732,7 +214,7 @@ in { }]; }; ".local/share/chatterino/Themes/nxtheme.json".text = with rice.color; let - tr = builtins.toString (rice.lib.float-to-drune rice.transparency); + # tr = builtins.toString (rice.lib.float-to-drune rice.transparency); nh = rice.lib.nohash; in /* json */ '' { @@ -822,6 +304,24 @@ in { } } ''; + ".local/share/chatterino/Settings/commands.json".text = '' + { + "commands": [ + { + "name": "/sl", + "func": "/streamlink", + "showInMsgContextMenu": false + } + ] + } + ''; + ".config/streamlink/config".text = '' + twitch-api-header=Authorization=OAuth='$(cat ${config.sops.secrets."streamlink/twitch-oauth".path})' + player=mpv + player-args='--no-terminal' + twitch-low-latency + default-stream=best + ''; }; }; } diff --git a/home-modules/games.nix b/home-modules/games.nix index 0b97d35..1f58b16 100644 --- a/home-modules/games.nix +++ b/home-modules/games.nix @@ -1,5 +1,4 @@ { pkgs, hyper, ... }: -# lib.mkIf (host == "NxNORTH" || host == "NxACE") pkgs.lib.mkIf (hyper.host == "NxNORTH") { home = { @@ -7,9 +6,11 @@ pkgs.lib.mkIf (hyper.host == "NxNORTH") protonup mangohud + prismlauncher + # heroic - mindustry-wayland + # mindustry-wayland ]) ++ [ pkgs.heroic ]; sessionVariables = { STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d"; diff --git a/home-modules/git.nix b/home-modules/git.nix index 1e54806..33920f4 100644 --- a/home-modules/git.nix +++ b/home-modules/git.nix @@ -1,40 +1,13 @@ { pkgs, hyper, rice, ... }: { home.packages = with pkgs; [ - git delta - - (pkgs.writeShellScriptBin "git_monitor" '' - #!/bin/bash - - # List of directories to check - directories=( - "$HOME/nix-dots" - "$HOME/obsidian-vault" - "$HOME/Pictures/wallpapers" - ) - echo "" - for dir in "''${directories[@]}"; do - if [ -d "$dir" ]; then - cd "$dir" || { echo "Cannot change directory to $dir"; exit 1; } - echo "$(echo $dir | rev | cut -f 1 -d'/' | rev):" - if [[ $* == *--fetch* ]]; then - git fetch - fi - gst - echo "" - cd - > /dev/null || { echo "Cannot change back to the original directory"; exit 1; } - else - echo "Directory $dir does not exist." - fi - done - '') - (writeShellScriptBin "gst" "awk -vOFS='' 'NR==FNR {all[i++] = $0; difffiles[$1] = $0; next;} ! ($2 in difffiles) {print; next;} {gsub($2, difffiles[$2]); print;} END {if (NR != FNR) {exit;} for (i in all) {print all[i];}}' <(git diff --color --stat=$(($(tput cols) - 3)) HEAD | sed '$d; s/^ //') <(git -c color.status=always status -sb)") ]; programs.git = { enable = true; + package = pkgs.gitFull; userName = ''Lennart J. Kurzweg (Nx2)''; userEmail = "git@${hyper.domain}"; delta = { @@ -46,6 +19,14 @@ whitespace-error-style = "22 reverse"; }; }; + extraConfig = { + credential = { + "https://git.da.dicos.de".username = pkgs.lib.mkIf (hyper.host =="NxWSL") "lkurzweg"; + "https://git.da.dicos.de".password = pkgs.lib.mkIf (hyper.host =="NxWSL") "Test"; + }; + url."ssh://git@git.da.dicos.de/".insteadOf = pkgs.lib.mkIf (hyper.host =="NxWSL") "https://git.da.dicos.de/"; + pull.rebase = false; # true + }; }; programs.lazygit = { enable = true; diff --git a/home-modules/helix.nix b/home-modules/helix.nix index e1e6b7f..06656a3 100644 --- a/home-modules/helix.nix +++ b/home-modules/helix.nix @@ -10,7 +10,6 @@ python311Packages.python-lsp-server jdt-language-server ruff - # ruff-lsp pyright lldb # debugger for llvm stuff yaml-language-server # yaml @@ -51,7 +50,7 @@ preview-completion-insert = true; completion-trigger-len = 1; auto-info = true; - true-color = false; # is detected automatically if set to false + true-color = true; # is detected automatically if set to false undercurl = false; # is detected automatically if set to false rulers = []; bufferline = "always"; diff --git a/home-modules/hyprland.nix b/home-modules/hyprland.nix index e3ef84e..4f5255c 100644 --- a/home-modules/hyprland.nix +++ b/home-modules/hyprland.nix @@ -108,7 +108,7 @@ in { workspace = let d1 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name); - d2 = if hyper.host == "NxXPS" then monitors.xps.second.name else (if hyper.hyper.host == "NxNORTH" then monitors.north.left.name else monitors.ace.main.name); + d2 = if hyper.host == "NxXPS" then monitors.xps.second.name else (if hyper.host == "NxNORTH" then monitors.north.left.name else monitors.ace.main.name); d3 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name); # d3 = if hyper.host == "NxXPS" then monitors.xps.main.name else (if hyper.hyper.host == "NxNORTH" then monitors.north.right.name else monitors.ace.main.name); compact = "gapsin:0, gapsout:0, bordersize:1, rounding:false"; diff --git a/home-modules/pkgs-list/shell.nix b/home-modules/pkgs-list/shell.nix index bdd67fa..bd00f5c 100644 --- a/home-modules/pkgs-list/shell.nix +++ b/home-modules/pkgs-list/shell.nix @@ -14,6 +14,7 @@ glib glow gnumake + htop imagemagick jq lolcat diff --git a/home.nix b/home.nix index c1d8e30..bd18cec 100644 --- a/home.nix +++ b/home.nix @@ -103,7 +103,7 @@ reflex ripgrep screen - speedtest-go + # speedtest-go spicetify-cli sssnake swww @@ -121,14 +121,12 @@ inputs.zen-browser.packages."${system}".default - ] ++ (if hyper.host != "NxACE" then [ + ] ++ (if (hyper.host != "NxACE") then [ signal-desktop obsidian zoom-us inkscape - ] else { - - }); + ] else []); xdg = { enable = true; diff --git a/sops-secrets.yaml b/sops-secrets.yaml index 1a54c0a..13cbb0c 100644 --- a/sops-secrets.yaml +++ b/sops-secrets.yaml @@ -19,6 +19,8 @@ syncthing: key.pem: ENC[AES256_GCM,data:zFgSrZelmXgTAm0Zl0HSTp+M4tLOQzksdYnA1NZPeu4R+mxMylilEtHzMp9zE7urz5gadjUEiguDBkfTOIzFeSLeUlXBDBWJhXf5JPZ403HES11qlIFdW8BPkzVC3X0N0KyydLdfhM0MAhZdyrRxn1ATc0ppvyqTpeN1rxNYMHTezRH9WMmKC9VS506rCIZrfOtEsuBpsxP6tTjOQ9AxuWV1z6/DRjv55U2EojZ/viM6sjGSsuDAYZQJBA7VQcNsw4PZu49OfA0czo7FbE6Gh6+TJ9PdMOUuo2/syH4yPBC7vqMECIBN4MHzhyoOTqcyZHIV5iJsZqTIbTN+CP72pPPrhs/a5K0GkyT0PPHVem+dGhyAJWQglSAlcK8kXWDP,iv:pzQOoQvFqoC3nIuGLNx97cCE7qO+PHCVw9G4K1mX2nk=,tag:zXUch/o/B97TlgHhAYUveA==,type:str] weechat: passphrase: ENC[AES256_GCM,data:3NVhMouf3wwMJTZCvIjbi5fjHJHxe25Q+wRo,iv:W8cShdM3iUyEiRCPNupMin3gfF+cqGxslD18CAvUW4c=,tag:DXBATGEhHjhXqy+J9BNVwg==,type:str] +streamlink: + twitch-oauth: ENC[AES256_GCM,data:SvV0CBVL6MO0zqiRg2Ns00KNHLDfzgNObse5F69n,iv:h0DFbwIVKfJSoVowgO3voAOdHXIsw1D3O/aweFRVKcI=,tag:PW0gc+gzlfdOUvIoYIkywg==,type:str] nx2site: cloudflare: api-token-dns-edit: ENC[AES256_GCM,data:fR4fH6NqwtHI8aebEwjUn5JMoy3q3GXgu/dREe8JK7yRBIOhJ8BKuw==,iv:fQqLRYCN/7zhpHzYxMcn8q1aA7x4qd3qWGgrFWn2E/U=,tag:GJ1muJG755ch/84Sgcf2Vw==,type:str] diff --git a/system-modules/boot.nix b/system-modules/boot.nix index ee76877..6c8251b 100644 --- a/system-modules/boot.nix +++ b/system-modules/boot.nix @@ -118,7 +118,7 @@ in efiSupport = true; }; }; - kernelPackages = pkgs.linuxPackages; # default kernel of pkgs + kernelPackages = pkgs.linuxPackages_6_12; }; }; } diff --git a/system-modules/calendar-dicos.nix b/system-modules/calendar-dicos.nix index 2960bb4..694a8a3 100644 --- a/system-modules/calendar-dicos.nix +++ b/system-modules/calendar-dicos.nix @@ -5,7 +5,7 @@ wantedBy = [ "timers.target" ]; timerConfig = { OnBootSec = "40m"; - OnUnitActiveSec = "24h"; + OnUnitActiveSec = "12h"; Unit = "nx_cal_dicos.service"; }; }; @@ -26,9 +26,9 @@ from ics.event import datetime NETTO_STUNDE = 18.46 WEEKLY = 12 -week_dict = {} -latest_week = 0 -latest_goal = WEEKLY +# week_dict = {} +# latest_week = 0 +# latest_goal = WEEKLY deficit = 0 def fraction_to_unicode(frac): @@ -51,10 +51,10 @@ def fraction_to_unicode(frac): def modify_event(event): """Modify the event if it contains 'DICOS' in the SUMMARY.""" - global week_dict - global latest_goal - global latest_week - global deficit + # global week_dict + # global latest_goal + # global latest_week + # global deficit if event.name is not None and "DICOS" in event.name: length = (event.end - event.begin).seconds / 3600 @@ -63,26 +63,29 @@ def modify_event(event): # Calculate total hours for DICOS events in the same week year, week, _ = event.begin.isocalendar() - if week != latest_week: - try: - deficit = latest_goal - week_dict[f"{year}_{latest_week}"] - except KeyError: - deficit = 0 + # if week != latest_week: + # try: + # deficit = latest_goal - week_dict[f"{year}_{latest_week}"] + # except KeyError: + # deficit = 0 - week_dict[f"{year}_{week}"] = length + (week_dict[f"{year}_{week}"] if f"{year}_{week}" in week_dict else 0) + # week_dict[f"{year}_{week}"] = length + (week_dict[f"{year}_{week}"] if f"{year}_{week}" in week_dict else 0) - progress = week_dict[f"{year}_{week}"] - goal = WEEKLY + deficit + # progress = week_dict[f"{year}_{week}"] + # goal = WEEKLY + deficit - if week != latest_week: - latest_goal = goal - latest_week = week + # if week != latest_week: + # latest_goal = goal + # latest_week = week - new_description = [event.description.split("\n")[0] or "::"] + try: + new_description = [event.description.split("\n")[0]] + except AttributeError: + new_description = ["::"] new_description.append("") new_description.append(f"Netto: {money_made[0]:.0f},{int(money_made[1] * 10):02d}€") - new_description.append(f"This weeks porgress: ({fraction_to_unicode(progress)}/{fraction_to_unicode(goal)})") - new_description.append(f"This weeks deficit: {fraction_to_unicode(deficit)}") + # new_description.append(f"This weeks porgress: ({fraction_to_unicode(progress)}/{fraction_to_unicode(goal)})") + # new_description.append(f"You're {fraction_to_unicode(abs(deficit))}h in the {'plus' if deficit < 0 else 'minus'} this week.") event.description = "\n".join(new_description) diff --git a/system-modules/games.nix b/system-modules/games.nix index c503521..cee2618 100644 --- a/system-modules/games.nix +++ b/system-modules/games.nix @@ -1,6 +1,5 @@ { pkgs, hyper, ... }: -# lib.mkIf (host == "NxNORTH" || host == "NxACE") -pkgs.lib.mkIf (hyper.host == "NxNORTH") +pkgs.lib.mkIf (hyper.host == "NxNORTH" || hyper.host == "NxACE") { programs = { steam = { diff --git a/system-modules/nvidia.nix b/system-modules/nvidia.nix index 6df57ec..bb81d13 100644 --- a/system-modules/nvidia.nix +++ b/system-modules/nvidia.nix @@ -57,7 +57,7 @@ pkgs.lib.mkIf hyper.nvidia.enable nvidiaSettings = true; # Optionally, you may need to select the appropriate driver version for your specific GPU. - package = config.boot.kernelPackages.nvidiaPackages.beta; + package = config.boot.kernelPackages.nvidiaPackages.stable; }; graphics = { enable = true; diff --git a/system-modules/nx2site.nix b/system-modules/nx2site.nix index 1fadf6e..993c8f4 100644 --- a/system-modules/nx2site.nix +++ b/system-modules/nx2site.nix @@ -41,6 +41,7 @@ let dns-user = "cloudflare"; in sub6 = "b8082b7afe9e80971fc9f9dda16ec284"; ssh = "c0f14f17f32d6595c202f041dd836eb3"; ssh6 = "f1ecb2d9d0522d4eec06437688ca76da"; + dev = "80e76834acc9243696d9763759b22147"; }; passord-file-path = config.sops.secrets."nx2site/cloudflare/global-api-key".path; in pkgs.writers.writePython3Bin "dyn_dns" { @@ -84,13 +85,14 @@ def main(): # Perform DNS updates # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record - print(f"${hyper.domain}: {update_record(record_id="${record_id.base}", record_name="${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}") - print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub}", record_name="*.${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}") - print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh}", record_name="ssh.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}") + print(f"${hyper.domain}: {update_record(record_id="${record_id.base}", record_name="${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}", end=", ") + print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub}", record_name="*.${hyper.domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}", end=", ") + print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh}", record_name="ssh.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}", end=", ") + print(f"dev.${hyper.domain}: {update_record(record_id="${record_id.dev}", record_name="dev.${hyper.domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}", end=", ") - print(f"${hyper.domain}: {update_record(record_id="${record_id.base6}", record_name="${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}") - print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub6}", record_name="*.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}") - print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh6}", record_name="ssh.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=False, pw=pw).status_code}") + print(f"${hyper.domain}: {update_record(record_id="${record_id.base6}", record_name="${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}", end=", ") + print(f"*.${hyper.domain}: {update_record(record_id="${record_id.sub6}", record_name="*.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}", end=", ") + print(f"ssh.${hyper.domain}: {update_record(record_id="${record_id.ssh6}", record_name="ssh.${hyper.domain}", ip=my_ip6, type="AAAA", proxied=False, pw=pw).status_code}", end="") if __name__ == "__main__": main() diff --git a/system-modules/nx2site/gitea.nix b/system-modules/nx2site/gitea.nix index 9276ff5..96bdb10 100644 --- a/system-modules/nx2site/gitea.nix +++ b/system-modules/nx2site/gitea.nix @@ -93,8 +93,8 @@ let git-user = "git"; in domain = "git.${hyper.domain}"; owner = "nx2"; repo = "Gitea-Pitch-Black"; - rev = "0.1.0"; - hash = "sha256-pU4YhgcPOT3PTcmBTjNE3FcyJgl39JGP41ckhRUKN7Y="; + rev = "0.1.1"; + hash = "sha256-40LzF/DobikNzrFjCSzvCT0g4x/CKS2JUWTf/CyJoJs="; }; in { "gitea-theme" = /* bash */ '' diff --git a/system-modules/nx2site/proxy.nix b/system-modules/nx2site/proxy.nix index 8be91bc..ff80f32 100644 --- a/system-modules/nx2site/proxy.nix +++ b/system-modules/nx2site/proxy.nix @@ -14,7 +14,7 @@ }; certs = { "${hyper.domain}" = { - extraDomainNames = builtins.map (subd: "${subd}.${hyper.domain}") [ "sync" "dev" ]; + extraDomainNames = builtins.map (subd: "${subd}.${hyper.domain}") [ "sync" ]; }; }; }; @@ -44,7 +44,7 @@ # appendConfig = ''''; clientMaxBodySize = "20m"; defaultHTTPListenPort = 80; - defaultListenAddresses = [ "0.0.0.0" ] ++ lib.optional config.networking.enableIPv6 "[::0]"; + defaultListenAddresses = [ "0.0.0.0" ] ++ pkgs.lib.optional config.networking.enableIPv6 "[::0]"; defaultListen = dl; defaultMimeTypes = "${pkgs.mailcap}/etc/nginx/mime.types"; defaultSSLListenPort = 443; @@ -136,7 +136,7 @@ listen = dl; locations = { "/" = { proxyPass = "http://127.0.0.1:8441"; }; }; }; - "dav.${hyper.domain}" = lib.mkIf config.services.radicale.enable (vh // { + "dav.${hyper.domain}" = pkgs.lib.mkIf config.services.radicale.enable (vh // { listen = dl; locations = { "/" = { proxyPass = "http://127.0.0.1:5232"; }; }; }); @@ -150,16 +150,22 @@ proxyWebsockets = true; }; }; + "pnx.${hyper.domain}" = vh // { + listen = dl; + locations."/" = { + proxyPass = "http://127.0.0.1:8040"; + proxyWebsockets = true; + }; + }; + "wip.${hyper.domain}" = vh // { + listen = dl; + }; "dev.${hyper.domain}" = vh // { - listen = dl ++ [ - # { addr = "0.0.0.0"; port = 8000; ssl = true; } - # { addr = "[::0]"; port = 8000; ssl = true; } - ]; - root = "/var/lib/hugo/nx2site/public"; - # locations."/" = { - # proxyPass = "http://127.0.0.1:8000"; - # proxyWebsockets = true; - # }; + listen = dl; + locations."/" = { + proxyPass = "http://127.0.0.1:8080"; + proxyWebsockets = true; + }; }; # is done atomatically # "cal.${hyper.domain}" = vh // {