diff --git a/configuration.nix b/configuration.nix index 2820da1..8b02c76 100755 --- a/configuration.nix +++ b/configuration.nix @@ -1,6 +1,6 @@ -{ pkgs, inputs, ... }: +{ pkgs, inputs, lib, host, ... }: { - imports = [ + imports = ([ inputs.sops-nix.nixosModules.sops ./system-modules/auto-mount.nix ./system-modules/hardware-configuration.nix @@ -26,7 +26,6 @@ ./system-modules/kodi.nix ./system-modules/networking.nix ./system-modules/nvidia.nix - ./system-modules/nx2site.nix ./system-modules/ollama.nix ./system-modules/qmk.nix ./system-modules/sops.nix @@ -36,8 +35,12 @@ ./system-modules/users.nix ./system-modules/virtualisation.nix ./system-modules/ydotool.nix + ]) ++ (if (host == "NxACE") then [ + ./system-modules/nx2site.nix ./system-modules/nx2site/proxy.nix - ]; + # ./system-modules/nx2site/gitea.nix + # ./system-modules/nx2site/vaultwarden.nix + ] else []); # Set your time zone. time.timeZone = "Europe/Berlin"; diff --git a/flake.nix b/flake.nix index 3ad5b84..3311f3f 100755 --- a/flake.nix +++ b/flake.nix @@ -22,6 +22,7 @@ outputs = { self, nixpkgs, nixpkgs-unstable, nixpkgs-latest, home-manager, ... }@inputs: let system = "x86_64-linux"; user = "nx2"; + domain = "nx2.site"; config = { allowUnfree = true; allowUnfreePredicate = pkg: builtins.elem (pkgs.lib.getName pkg) (import ./flake-modules/allowed.nix).unfree; }; @@ -42,7 +43,7 @@ enable = if (host == "NxXPS" || host == "NxNORTH") then true else false; prime = if (host == "NxXPS") then true else false; }; - in { inherit inputs user host pkgs-unstable pkgs-latest secrets rice nvidia; }; + in { inherit inputs user host domain pkgs-unstable pkgs-latest secrets rice nvidia; }; }; in { NxXPS = make-nixos-system "NxXPS"; @@ -59,13 +60,12 @@ enable = if (host == "NxXPS" || host == "NxNORTH") then true else false; prime = if (host == "NxXPS") then true else false; }; - in { inherit inputs system user host pkgs-unstable pkgs-latest rice secrets nvidia; }; + in { inherit inputs system user host domain pkgs-unstable pkgs-latest rice secrets nvidia; }; }; in { "${user}@NxXPS" = make-home-configuration "NxXPS" user; "${user}@NxNORTH" = make-home-configuration "NxNORTH" user; "${user}@NxACE" = make-home-configuration "NxACE" user; - "tv@NxACE" = make-home-configuration "NxACE" "tv"; }; }; } diff --git a/home-modules/bash.nix b/home-modules/bash.nix index c5d0985..2b1f025 100755 --- a/home-modules/bash.nix +++ b/home-modules/bash.nix @@ -1,9 +1,5 @@ -{ pkgs, lib, user, ... }: -lib.mkIf (user != "tv") +{ ... }: { - home.packages = with pkgs; [ - bash - ]; programs.bash = { enable = true; shellAliases = { @@ -19,11 +15,5 @@ lib.mkIf (user != "tv") "checkjobs" ]; enableCompletion = false; - # initExtra = '' - # if [[ $- == *i* ]] # if interactive - # then - # eval "$(${pkgs.starship}/bin/starship init bash)" - # fi - # ''; }; } diff --git a/home-modules/chatterino.nix b/home-modules/chatterino.nix index 657a49d..5a0970b 100755 --- a/home-modules/chatterino.nix +++ b/home-modules/chatterino.nix @@ -1,11 +1,15 @@ { pkgs, lib, rice, user, secrets, ... }: let channels = [ + "Caedrel" + "NoWay4u_Sir" + "zackrawrr" + "agurin" "asmongold" "Broeki" "Broxah" - "Caedrel" + # "Caedrel" "chrissyofficial" "EintrachtSpandau" "GamesDoneQuick" @@ -28,7 +32,7 @@ let "maxim" "NASA" "NNOPrime" - "NoWay4u_Sir" + # "NoWay4u_Sir" "OfficialMikeShinoda" "ow_esports" "PrimeGaming" @@ -41,7 +45,7 @@ let "Trick2g" "TSM_ImperialHal" "Xisuma" - "zackrawrr" + # "zackrawrr" ]; tabber = channel-name: { highlightsEnabled = true; @@ -57,1362 +61,697 @@ let type = "split"; }; }; -in -lib.mkIf (user != "tv") -{ - home.packages = with pkgs; [ - chatterino2 - ]; - - home.file.".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; '' - { - "accounts": { - "current": "${username}", - "uid189594946": { - "clientID": "${clientID}", - "oauthToken": "${oauthToken}", - "userID": "${userID}", - "username": "${username}" +in { + home = { + packages = with pkgs; [ chatterino2 ]; + file = { + ".local/share/chatterino/Settings/settings.json".text = with secrets.chatterino; '' + { + "accounts": { + "current": "${username}", + "uid189594946": { + "clientID": "${clientID}", + "oauthToken": "${oauthToken}", + "userID": "${userID}", + "username": "${username}" + } + }, + "appearance": { + "boldScale": 63.0, + "currentFontFamily": "${rice.font.base.name}", + "currentFontSize": 12, + "messages": { + "alternateMessageBackground": true, + "lastMessageColor": "#ff7f0002", + "lastMessagePattern": 10, + "separateMessages": true, + "showTimestamps": false, + "timestampFormat": "h =mm", + "usernameDisplayMode": 1 + }, + "splitheader": { + "showGame": true, + "showTitle": true, + "showUptime": true, + "showViewerCount": true + }, + "tabVisibility": 1, + "theme": { + "name": "Black" + } + }, + "behaviour": { + "pauseOnHoverDuration": 5.0, + "showJoins": false, + "usernameRightClickBehavior": 0, + "usernameRightClickBehaviorWithModifier": 1 + }, + "emotes": { + "removeSpacesBetweenEmotes": false, + "showUnlistedSevenTVEmotes": true + }, + "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": "" + } + ], + "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" + } + }, + "misc": { + "currentVersion": "2.5.1", + "lockNotebookLayout": false + }, + "similarity": { + "hideSimilar": false, + "hideSimilarMaxDelay": 30, + "hideSimilarMaxMessagesToCheck": 5, + "similarityEnabled": false + }, + "ui": { + "lastSelectChannelTab": 0, + "lastSelectIrcConn": -1 + } } - }, - "appearance": { - "boldScale": 63.0, - "currentFontFamily": "${rice.font.base.name}", - "currentFontSize": 12, - "messages": { - "alternateMessageBackground": true, - "lastMessageColor": "#ff7f0002", - "lastMessagePattern": 10, - "separateMessages": true, - "showTimestamps": false, - "timestampFormat": "h =mm", - "usernameDisplayMode": 1 - }, - "splitheader": { - "showGame": true, - "showTitle": true, - "showUptime": true, - "showViewerCount": true - }, - "tabVisibility": 1, - "theme": { - "name": "Black" + ''; + ".local/share/chatterino/Settings/window-layout.json".text = builtins.toJSON { + windows = [ + { + emotePopup = { + x = 0; + y = 0; + }; + height = 569; + state = "maximized"; + tabs = map tabber channels; + type = "main"; + width = 943; + x = 0; + y = 0; } - }, - "behaviour": { - "pauseOnHoverDuration": 5.0, - "showJoins": false, - "usernameRightClickBehavior": 0, - "usernameRightClickBehaviorWithModifier": 1 - }, - "emotes": { - "removeSpacesBetweenEmotes": false, - "showUnlistedSevenTVEmotes": true - }, - "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": "" - } - ], - "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" - } - }, - "misc": { - "currentVersion": "2.5.1", - "lockNotebookLayout": false - }, - "similarity": { - "hideSimilar": false, - "hideSimilarMaxDelay": 30, - "hideSimilarMaxMessagesToCheck": 5, - "similarityEnabled": false - }, - "ui": { - "lastSelectChannelTab": 0, - "lastSelectIrcConn": -1 - } - } - ''; - # home.file.".local/share/chatterino/Settings/settings.json".text = builtins.toJSON { - # 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" - # ]; - # "close popup window" = { - # action = "delete"; - # keySequence = "Esc"; - # category = "popupWindow"; - # arguments = [ ]; - # }; - # "popup accept" = { - # action = "accept"; - # keySequence = "Return"; - # category = "popupWindow"; - # arguments = [ ]; - # }; - # "popup focus search box" = { - # action = "search"; - # keySequence = "Ctrl+F"; - # category = "popupWindow"; - # arguments = [ ]; - # }; - # "popup reject" = { - # action = "reject"; - # keySequence = "Esc"; - # category = "popupWindow"; - # arguments = [ ]; - # }; - # "popup scroll down" = { - # action = "scrollPage"; - # keySequence = "PgDown"; - # category = "popupWindow"; - # arguments = [ - # "down" - # ]; - # }; - # "popup scroll up" = { - # action = "scrollPage"; - # keySequence = "PgUp"; - # category = "popupWindow"; - # arguments = [ - # "up" - # ]; - # }; - # "popup select last tab" = { - # action = "openTab"; - # keySequence = "Ctrl+9"; - # category = "popupWindow"; - # arguments = [ - # "last" - # ]; - # }; - # "popup select next tab" = { - # action = "openTab"; - # keySequence = "Ctrl+Tab"; - # category = "popupWindow"; - # arguments = [ - # "next" - # ]; - # }; - # "popup select previous tab" = { - # action = "openTab"; - # keySequence = "Ctrl+Shift+Tab"; - # category = "popupWindow"; - # arguments = [ - # "previous" - # ]; - # }; - # "popup select tab #1" = { - # action = "openTab"; - # keySequence = "Ctrl+1"; - # category = "popupWindow"; - # arguments = [ - # "0" - # ]; - # }; - # "popup select tab #2" = { - # action = "openTab"; - # keySequence = "Ctrl+2"; - # category = "popupWindow"; - # arguments = [ - # "1" - # ]; - # }; - # "popup select tab #3" = { - # action = "openTab"; - # keySequence = "Ctrl+3"; - # category = "popupWindow"; - # arguments = [ - # "2" - # ]; - # }; - # "popup select tab #4" = { - # action = "openTab"; - # keySequence = "Ctrl+4"; - # category = "popupWindow"; - # arguments = [ - # "3" - # ]; - # }; - # "popup select tab #5" = { - # action = "openTab"; - # keySequence = "Ctrl+5"; - # category = "popupWindow"; - # arguments = [ - # "4" - # ]; - # }; - # "popup select tab #6" = { - # action = "openTab"; - # keySequence = "Ctrl+6"; - # category = "popupWindow"; - # arguments = [ - # "5" - # ]; - # }; - # "popup select tab #7" = { - # action = "openTab"; - # keySequence = "Ctrl+7"; - # category = "popupWindow"; - # arguments = [ - # "6" - # ]; - # }; - # "popup select tab #8" = { - # action = "openTab"; - # keySequence = "Ctrl+8"; - # category = "popupWindow"; - # arguments = [ - # "7" - # ]; - # }; - # "change channel" = { - # action = "changeChannel"; - # keySequence = "Ctrl+R"; - # category = "split"; - # arguments = [ ]; - # }; - # "create clip" = { - # action = "createClip"; - # keySequence = "Alt+X"; - # category = "split"; - # arguments = [ ]; - # }; - # delete = { - # action = "delete"; - # keySequence = "Ctrl+W"; - # category = "split"; - # arguments = [ ]; - # }; - # "focus down" = { - # action = "focus"; - # keySequence = "Alt+Down"; - # category = "split"; - # arguments = [ - # "down" - # ]; - # }; - # "focus left" = { - # action = "focus"; - # keySequence = "Alt+Left"; - # category = "split"; - # arguments = [ - # "left" - # ]; - # }; - # "focus right" = { - # action = "focus"; - # keySequence = "Alt+Right"; - # category = "split"; - # arguments = [ - # "right" - # ]; - # }; - # "focus up" = { - # action = "focus"; - # keySequence = "Alt+Up"; - # category = "split"; - # arguments = [ - # "up" - # ]; - # }; - # "open debug popup" = { - # action = "debug"; - # keySequence = "F10"; - # category = "split"; - # arguments = [ ]; - # }; - # reconnect = { - # action = "reconnect"; - # keySequence = "Ctrl+F5"; - # category = "split"; - # arguments = [ ]; - # }; - # "reload emotes" = { - # action = "reloadEmotes"; - # keySequence = "F5"; - # category = "split"; - # arguments = [ ]; - # }; - # "scroll page down" = { - # action = "scrollPage"; - # keySequence = "PgDown"; - # category = "split"; - # arguments = [ - # "down" - # ]; - # }; - # "scroll page up" = { - # action = "scrollPage"; - # keySequence = "PgUp"; - # category = "split"; - # arguments = [ - # "up" - # ]; - # }; - # "scroll to bottom" = { - # action = "scrollToBottom"; - # keySequence = "Ctrl+End"; - # category = "split"; - # arguments = [ ]; - # }; - # "scroll to top" = { - # action = "scrollToTop"; - # keySequence = "Ctrl+Home"; - # category = "split"; - # arguments = [ ]; - # }; - # "show global search" = { - # action = "showGlobalSearch"; - # keySequence = "Ctrl+Shift+F"; - # category = "split"; - # arguments = [ ]; - # }; - # "show search" = { - # action = "showSearch"; - # keySequence = "Ctrl+F"; - # category = "split"; - # arguments = [ ]; - # }; - # "emote picker" = { - # action = "openEmotesPopup"; - # keySequence = "Ctrl+E"; - # category = "splitInput"; - # arguments = [ ]; - # }; - # "go to end of input" = { - # action = "cursorToEnd"; - # keySequence = "End"; - # category = "splitInput"; - # arguments = [ - # "withoutSelection" - # ]; - # }; - # "go to end of input with selection" = { - # action = "cursorToEnd"; - # keySequence = "Shift+End"; - # category = "splitInput"; - # arguments = [ - # "withSelection" - # ]; - # }; - # "go to start of input" = { - # action = "cursorToStart"; - # keySequence = "Home"; - # category = "splitInput"; - # arguments = [ - # "withoutSelection" - # ]; - # }; - # "go to start of input with selection" = { - # action = "cursorToStart"; - # keySequence = "Shift+Home"; - # category = "splitInput"; - # arguments = [ - # "withSelection" - # ]; - # }; - # "next message" = { - # action = "nextMessage"; - # keySequence = "Down"; - # category = "splitInput"; - # arguments = [ ]; - # }; - # "previous message" = { - # action = "previousMessage"; - # keySequence = "Up"; - # category = "splitInput"; - # arguments = [ ]; - # }; - # "send message" = { - # action = "sendMessage"; - # keySequence = "Return"; - # category = "splitInput"; - # arguments = [ ]; - # }; - # "send message and keep text" = { - # action = "sendMessage"; - # keySequence = "Ctrl+Return"; - # category = "splitInput"; - # arguments = [ - # "keepInput" - # ]; - # }; - # "new popup window" = { - # action = "popup"; - # keySequence = "Ctrl+N"; - # category = "window"; - # arguments = [ - # "split" - # ]; - # }; - # "new popup window from tab" = { - # action = "popup"; - # keySequence = "Ctrl+Shift+N"; - # category = "window"; - # arguments = [ - # "window" - # ]; - # }; - # "new split" = { - # action = "newSplit"; - # keySequence = "Ctrl+T"; - # category = "window"; - # arguments = [ ]; - # }; - # "new tab" = { - # action = "newTab"; - # keySequence = "Ctrl+Shift+T"; - # category = "window"; - # arguments = [ ]; - # }; - # "open quick switcher" = { - # action = "openQuickSwitcher"; - # keySequence = "Ctrl+K"; - # category = "window"; - # arguments = [ ]; - # }; - # "open settings" = { - # action = "openSettings"; - # keySequence = "Ctrl+P"; - # category = "window"; - # arguments = [ ]; - # }; - # "remove tab" = { - # action = "removeTab"; - # keySequence = "Ctrl+Shift+W"; - # category = "window"; - # arguments = [ ]; - # }; - # "reopen split" = { - # action = "reopenSplit"; - # keySequence = "Ctrl+G"; - # category = "window"; - # arguments = [ ]; - # }; - # "select last tab" = { - # action = "openTab"; - # keySequence = "Ctrl+9"; - # category = "window"; - # arguments = [ - # "last" - # ]; - # }; - # "select next tab" = { - # action = "openTab"; - # keySequence = "Ctrl+Tab"; - # category = "window"; - # arguments = [ - # "next" - # ]; - # }; - # "select previous tab" = { - # action = "openTab"; - # keySequence = "Ctrl+Shift+Tab"; - # category = "window"; - # arguments = [ - # "previous" - # ]; - # }; - # "select tab #1" = { - # action = "openTab"; - # keySequence = "Ctrl+1"; - # category = "window"; - # arguments = [ - # "0" - # ]; - # }; - # "select tab #2" = { - # action = "openTab"; - # keySequence = "Ctrl+2"; - # category = "window"; - # arguments = [ - # "1" - # ]; - # }; - # "select tab #3" = { - # action = "openTab"; - # keySequence = "Ctrl+3"; - # category = "window"; - # arguments = [ - # "2" - # ]; - # }; - # "select tab #4" = { - # action = "openTab"; - # keySequence = "Ctrl+4"; - # category = "window"; - # arguments = [ - # "3" - # ]; - # }; - # "select tab #5" = { - # action = "openTab"; - # keySequence = "Ctrl+5"; - # category = "window"; - # arguments = [ - # "4" - # ]; - # }; - # "select tab #6" = { - # action = "openTab"; - # keySequence = "Ctrl+6"; - # category = "window"; - # arguments = [ - # "5" - # ]; - # }; - # "select tab #7" = { - # action = "openTab"; - # keySequence = "Ctrl+7"; - # category = "window"; - # arguments = [ - # "6" - # ]; - # }; - # "select tab #8" = { - # action = "openTab"; - # keySequence = "Ctrl+8"; - # category = "window"; - # arguments = [ - # "7" - # ]; - # }; - # "toggle live tabs only" = { - # action = "setTabVisibility"; - # keySequence = "Ctrl+Shift+L"; - # category = "window"; - # arguments = [ - # "toggleLiveOnly" - # ]; - # }; - # "toggle local r9k" = { - # action = "toggleLocalR9K"; - # keySequence = "Ctrl+H"; - # category = "window"; - # arguments = [ ]; - # }; - # "toggle tab visibility" = { - # action = "setTabVisibility"; - # keySequence = "Ctrl+U"; - # category = "window"; - # arguments = [ - # "toggle" - # ]; - # }; - # "zoom in" = { - # action = "zoom"; - # keySequence = "Ctrl++"; - # category = "window"; - # arguments = [ - # "in" - # ]; - # }; - # "zoom out" = { - # action = "zoom"; - # keySequence = "Ctrl+-"; - # category = "window"; - # arguments = [ - # "out" - # ]; - # }; - # "zoom reset" = { - # action = "zoom"; - # keySequence = "Ctrl+0"; - # category = "window"; - # arguments = [ - # "reset" - # ]; - # }; - # }; - # misc = { - # currentVersion = "2.5.1"; - # lockNotebookLayout = false; - # }; - # ui = { - # lastSelectChannelTab = 0; - # lastSelectIrcConn = -1; - # }; - # appearance = { - # theme = { - # name = "Black"; - # }; - # tabVisibility = 1; - # smoothScrollingNewMessages = true;o - # currentFontFamily = rice.font.base.name; - # messages = { - # alternateMessageBackground = true; - # showTimestamps = false; - # timestampFormat = "h =mm"; - # separateMessages = true; - # lastMessagePattern = 10; - # lastMessageColor = "#ff7f0002"; - # usernameDisplayMode = 1; - # }; - # currentFontSize = 12; - # splitheader = { - # showUptime = true; - # showViewerCount = true; - # showGame = true; - # showTitle = true; - # }; - # boldScale = 63.0; - # }; - # accounts = secrets.chatterino.accounts; - # behaviour = { - # pauseOnHoverDuration = 5.0; - # usernameRightClickBehavior = 0; - # usernameRightClickBehaviorWithModifier = 1; - # showJoins = false; - # }; - # highlighting = { - # selfMessageHighlight = { - # enabled = true; - # color = "#73008cff"; - # }; - # badges = [ - # { - # name = "broadcaster"; - # displayName = "Broadcaster"; - # showInMentions = false; - # alert = false; - # sound = false; - # soundUrl = ""; - # color = "#7f7f3f49"; - # } - # { - # name = "admin"; - # displayName = "Admin"; - # showInMentions = false; - # alert = false; - # sound = false; - # soundUrl = ""; - # color = "#7f7f3f49"; - # } - # { - # name = "staff"; - # displayName = "Staff"; - # showInMentions = false; - # alert = false; - # sound = false; - # soundUrl = ""; - # color = "#7f7f3f49"; - # } - # { - # name = "moderator"; - # displayName = "Moderator"; - # showInMentions = false; - # alert = false; - # sound = false; - # soundUrl = ""; - # } - # { - # name = "vip"; - # displayName = "VIP"; - # showInMentions = false; - # alert = false; - # sound = false; - # soundUrl = ""; - # color = "#7f7f3578"; - # } - # ]; - # }; - # emotes = { - # removeSpacesBetweenEmotes = false; - # showUnlistedSevenTVEmotes = true; - # }; - # similarity = { - # similarityEnabled = false; - # hideSimilar = false; - # hideSimilarMaxDelay = 30; - # hideSimilarMaxMessagesToCheck = 5; - # }; - # }; - - - - home.file.".local/share/chatterino/Settings/window-layout.json".text = builtins.toJSON { - windows = [ - { - emotePopup = { - x = 0; - y = 0; - }; - height = 569; - state = "maximized"; - tabs = map tabber channels; - type = "main"; - width = 943; - x = 0; - y = 0; - } - ]; + ]; + }; + }; }; } diff --git a/home-modules/direnv.nix b/home-modules/direnv.nix index d6eff69..3cd677c 100755 --- a/home-modules/direnv.nix +++ b/home-modules/direnv.nix @@ -1,5 +1,4 @@ { lib, user, ... }: -lib.mkIf (user != "tv") { programs = { direnv = { diff --git a/home-modules/fish.nix b/home-modules/fish.nix index 1bc84a6..3f576e3 100755 --- a/home-modules/fish.nix +++ b/home-modules/fish.nix @@ -1,5 +1,4 @@ { pkgs, lib, rice, user, ... }: -lib.mkIf (user != "tv") { home.packages = with pkgs; [ fish diff --git a/home-modules/foot.nix b/home-modules/foot.nix deleted file mode 100644 index 7857be2..0000000 --- a/home-modules/foot.nix +++ /dev/null @@ -1,270 +0,0 @@ -{ config, pkgs, rice, lib, user, ... }: -lib.mkIf (user != "tv") -{ - home.packages = with pkgs; [ - foot - ]; - - programs.foot = { - enable = true; - # background = rice.color.background; - # foreground = rice.color.foreground; - # cursor = rice.color.foreground; - # color0 = rice.color.black.base; - # color8 = rice.color.black.bright; - # color1 = rice.color.red.base; - # color9 = rice.color.red.bright; - # color2 = rice.color.green.base; - # color10 = rice.color.green.bright; - # color3 = rice.color.yellow.base; - # color11 = rice.color.yellow.bright; - # color4 = rice.color.blue.base; - # color12 = rice.color.blue.bright; - # color5 = rice.color.magenta.base; - # color13 = rice.color.magenta.bright; - # color6 = rice.color.cyan.base; - # color14 = rice.color.cyan.bright; - # color7 = rice.color.white.base; - # color15 = rice.color.white.bright; - # background_opacity = builtins.toString rice.transparency; - # window_padding_width = 5; - # remember_window_size = false; - - # settings = { - # main = { - # shell = ''$SHELL (if set, otherwise user's default shell from /etc/passwd)''; - # term = ''foot (or xterm-256color if built with -Dterminfo=disabled)''; - # login-shell = ''no''; - - # # app-id = ''foot''; - # title = ''foot''; - # locked-title = ''no''; - - # font = ''${rice.font.code.name}:size=8''; - # font-size-adjustment = ''0.5''; - # line-height = ""; - # letter-spacing = ''0''; - # horizontal-letter-offset = ''0''; - # vertical-letter-offset = ''0''; - # underline-offset = ""; - # underline-thickness = ""; - # # box-drawings-uses-font-glyphs = "no"; - # # dpi-aware = ''no''; - - # # initial-window-size-pixels = ''700x500''; - # # initial-window-size-chars = ""; - # # initial-window-mode = ''windowed''; - # pad = ''5x5''; - # resize-by-cells = ''yes''; - # resize-keep-grid = ''yes''; - # resize-delay-ms = ''100''; - - # # bold-text-in-bright = false; - # word-delimiters = '',│`|:"'()[]{}<>''; - # selection-target = ''primary''; - # workers = ""; - # utmp-helper = ''/usr/lib/utempter/utempter''; - # # environment = { - # # name = ''value''; - # # }; - - # }; - # bell = { - # urgent = ''no''; - # notify = ''no''; - # visual = ''no''; - # command = ''''; - # command-focused = ''no''; - # }; - # desktop-notifications = { - # command = ''notify-send --wait --app-name ''${app-id} --icon ''${app-id} --category ''${category} --urgency ''${urgency} --expire-time ''${expire-time} --hint STRING:image-path:''${icon} --hint BOOLEAN:suppress-sound:''${muted} --hint STRING:sound-name:''${sound-name} --replace-id ''${replace-id} ''${action-argument} --print-id -- ''${title} ''${body}''; - # command-action-argument = ''--action ''${action-name}=''${action-label}''; - # close = ''""''; - # inhibit-when-focused = ''yes''; - - # }; - # scrollback = { - # lines = ''1000''; - # multiplier = ''3.0''; - # indicator-position = ''relative''; - # indicator-format = ''""''; - # }; - # url = { - # launch = ''xdg-open ''${url}''; - # label-letters = ''sadfjklewcmpgh''; - # osc8-underline = ''url-mode''; - # protocols = ''http, https, ftp, ftps, file, gemini, gopher''; - # uri-characters = ''abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]''; - # }; - # cursor = { - # style = ''block''; - # color = ""; - # blink = ''no''; - # blink-rate = ''500''; - # beam-thickness = ''1.5''; - # underline-thickness = ""; - # }; - # mouse = { - # hide-when-typing = ''no''; - # alternate-scroll-mode = ''yes''; - # }; - # touch = { - # long-press-delay = ''400''; - # }; - # colors = { - # alpha = ''1.0''; - # background = ''242424''; - # foreground = ''ffffff''; - # flash = ''7f7f00''; - # flash-alpha = ''0.5''; - - # # Normal/regular colors (color palette 0-7) - # regular0 = ''242424''; - # regular1 = ''f62b5a''; - # regular2 = ''47b413''; - # regular3 = ''e3c401''; - # regular4 = ''24acd4''; - # regular5 = ''f2affd''; - # regular6 = ''13c299''; - # regular7 = ''e6e6e6''; - - # # Bright colors (color palette 8-15) - # bright0 = ''616161''; - # bright1 = ''ff4d51''; - # bright2 = ''35d450''; - # bright3 = ''e9e836''; - # bright4 = ''5dc5f8''; - # bright5 = ''feabf2''; - # bright6 = ''24dfc4''; - # bright7 = ''ffffff''; - - # # dimmed colors (see foot.ini(5) man page) - # # dim0 = ""; - # # ... - # # dim7 = ""; - - # # The remaining 256-color palette - # # 16 = <256-color palette #16> - # # ... - # # 255 = <256-color palette #255> - - # # Misc colors - # selection-foreground = ""; - # selection-background = ""; - # jump-labels = " "; - # scrollback-indicator = " "; - # search-box-no-match = " "; - # search-box-match = " "; - # urls = ""; - # }; - # csd = { - # preferred = ''server''; - # size = ''26''; - # font = ""; - # color = ""; - # hide-when-maximized = ''no''; - # double-click-to-maximize = ''yes''; - # border-width = ''0''; - # border-color = ""; - # button-width = ''26''; - # button-color = ""; - # button-minimize-color = ""; - # button-maximize-color = ""; - # button-close-color = ""; - # }; - # key-bindings = { - # scrollback-up-page = ''Shift+Page_Up''; - # scrollback-up-half-page = ''none''; - # scrollback-up-line = ''none''; - # scrollback-down-page = ''Shift+Page_Down''; - # scrollback-down-half-page = ''none''; - # scrollback-down-line = ''none''; - # scrollback-home = ''none''; - # scrollback-end = ''none''; - # clipboard-copy = ''Control+Shift+c XF86Copy''; - # clipboard-paste = ''Control+Shift+v XF86Paste''; - # primary-paste = ''Shift+Insert''; - # search-start = ''Control+Shift+r''; - # font-increase = ''Control+plus Control+equal Control+KP_Add''; - # font-decrease = ''Control+minus Control+KP_Subtract''; - # font-reset = ''Control+0 Control+KP_0''; - # spawn-terminal = ''Control+Shift+n''; - # minimize = ''none''; - # maximize = ''none''; - # fullscreen = ''none''; - # pipe-visible = ''[sh -c "xurls | fuzzel | xargs -r firefox"] none''; - # pipe-scrollback = ''[sh -c "xurls | fuzzel | xargs -r firefox"] none''; - # pipe-selected = ''[xargs -r firefox] none''; - # pipe-command-output = ''[wl-copy] none''; - # show-urls-launch = ''Control+Shift+o''; - # show-urls-copy = ''none''; - # show-urls-persistent = ''none''; - # prompt-prev = ''Control+Shift+z''; - # prompt-next = ''Control+Shift+x''; - # unicode-input = ''Control+Shift+u''; - # noop = ''none''; - # }; - # search-bindings = { - # cancel = ''Control+g Control+c Escape''; - # commit = ''Return''; - # find-prev = ''Control+r''; - # find-next = ''Control+s''; - # cursor-left = ''Left Control+b''; - # cursor-left-word = ''Control+Left Mod1+b''; - # cursor-right = ''Right Control+f''; - # cursor-right-word = ''Control+Right Mod1+f''; - # cursor-home = ''Home Control+a''; - # cursor-end = ''End Control+e''; - # delete-prev = ''BackSpace''; - # delete-prev-word = ''Mod1+BackSpace Control+BackSpace''; - # delete-next = ''Delete''; - # delete-next-word = ''Mod1+d Control+Delete''; - # extend-char = ''Shift+Right''; - # extend-to-word-boundary = ''Control+w Control+Shift+Right''; - # extend-to-next-whitespace = ''Control+Shift+w''; - # extend-line-down = ''Shift+Down''; - # extend-backward-char = ''Shift+Left''; - # extend-backward-to-word-boundary = ''Control+Shift+Left''; - # extend-backward-to-next-whitespace = ''none''; - # extend-line-up = ''Shift+Up''; - # clipboard-paste = ''Control+v Control+Shift+v Control+y XF86Paste''; - # primary-paste = ''Shift+Insert''; - # unicode-input = ''none''; - # quit = ''none''; - # scrollback-up-page = ''Shift+Page_Up''; - # scrollback-up-half-page = ''none''; - # scrollback-up-line = ''none''; - # scrollback-down-page = ''Shift+Page_Down''; - # scrollback-down-half-page = ''none''; - # scrollback-down-line = ''none''; - # scrollback-home = ''none''; - # scrollback-end = ''none''; - # }; - # url-bindings = { - # cancel = ''Control+g Control+c Control+d Escape''; - # toggle-url-visible = ''t''; - # }; - # text-bindings = { - # "\x03" = ''Mod4+c''; - # }; - # mouse-bindings = { - # scrollback-up-mouse = ''BTN_WHEEL_BACK''; - # scrollback-down-mouse = ''BTN_WHEEL_FORWARD''; - # font-increase = ''Control+BTN_WHEEL_BACK''; - # font-decrease = ''Control+BTN_WHEEL_FORWARD''; - # selection-override-modifiers = ''Shift''; - # primary-paste = ''BTN_MIDDLE''; - # select-begin = ''BTN_LEFT''; - # select-begin-block = ''Control+BTN_LEFT''; - # select-extend = ''BTN_RIGHT''; - # select-extend-character-wise = ''Control+BTN_RIGHT''; - # select-word = ''BTN_LEFT-2''; - # select-word-whitespace = ''Control+BTN_LEFT-2''; - # select-quote = ''BTN_LEFT-3''; - # select-row = ''BTN_LEFT-4''; - - # # vim: ft = ''dosini''; - # }; - # }; - }; -} diff --git a/home-modules/git.nix b/home-modules/git.nix index 2622e48..48f5287 100755 --- a/home-modules/git.nix +++ b/home-modules/git.nix @@ -1,5 +1,4 @@ -{ pkgs, lib, user, rice, ... }: -lib.mkIf (user != "tv") +{ pkgs, rice, ... }: { home.packages = with pkgs; [ git @@ -11,9 +10,7 @@ lib.mkIf (user != "tv") # List of directories to check directories=( "$HOME/nix-dots" - "$HOME/shared/nx-obsidian-vault" - "$HOME/shared/HSMW/Praxis/BCAM/bolt-llmserver" - "$HOME/shared/HSMW/Praxis/BCAM/bcam-tools" + "$HOME/obsidian-vault" "$HOME/Pictures/wallpapers" ) echo "" diff --git a/home-modules/gpg.nix b/home-modules/gpg.nix index 48dc298..8f1931e 100644 --- a/home-modules/gpg.nix +++ b/home-modules/gpg.nix @@ -9,8 +9,7 @@ ]); # services.pcscd.enable = true; - services.gpg-agent = - let + services.gpg-agent = let min2sec = min: (min * 60); in { enable = true; @@ -22,7 +21,7 @@ enableFishIntegration = true; defaultCacheTtlSsh = min2sec 60; defaultCacheTtl = min2sec 30; - # pinentryPackage = pkgs.pinentry-gtk2; + # pinentryPackage = pkgs.pinentry-curses; }; home.file.".gnupg/gpg.conf".text = '' diff --git a/home-modules/gtk.nix b/home-modules/gtk.nix index d581fcb..ef8a728 100755 --- a/home-modules/gtk.nix +++ b/home-modules/gtk.nix @@ -1,5 +1,4 @@ -{ config, pkgs, lib, rice, user, ... }: -let +{ config, pkgs, lib, rice, user, ... }: let # theme-name = "Colloid-Pink-Dark-Compact"; # theme-package = pkgs.colloid-gtk-theme.override { # themeVariants = [ "pink" ]; @@ -14,9 +13,7 @@ let tweaks = [ "rimless" "black" ]; variant = "macchiato"; }; -in -lib.mkIf (user != "tv") -{ +in { home.packages = with pkgs; [ # gnome.gnome-themes-extra # gnome.adwaita-icon-theme diff --git a/home-modules/hyprland-autoname-workspaces.nix b/home-modules/hyprland-autoname-workspaces.nix index e9aa91a..4f33622 100755 --- a/home-modules/hyprland-autoname-workspaces.nix +++ b/home-modules/hyprland-autoname-workspaces.nix @@ -1,109 +1,107 @@ -{ pkgs, lib, user, ... }: -lib.mkIf (user != "tv") +{ pkgs, ... }: { - home.packages = [ - pkgs.hyprland-autoname-workspaces - ]; - - home.file.".config/hyprland-autoname-workspaces/config.toml".text = '' - version = "1.1.14" + home = { + packages = with pkgs; [ hyprland-autoname-workspaces ]; + file.".config/hyprland-autoname-workspaces/config.toml".text = '' + version = "1.1.14" - [class] - VirtualBox = "" - steam = "󰓓" - "VirtualBox Manager" = "" - "com.obsproject.Studio" = "" - "[Ff]irefox" = "󰈹" - "[Tt]hunderbird" = "" - pcbnew = "" - ".*.exe" = "" - Element = "󰘨" - Signal = "󱅵" - Gimp = "" - VSCodium = "󰨞" - "[sS]potify" = "" - virt-manager = "" - lutris = "󰊗" - DEFAULT = "{class}" - "epicgameslauncher.exe" = "󰯷" - "[Cc]ode" = "󰨞" - "galaxyclient.exe" = "󰮡" - pavucontrol = "󰕾" - "Tor Browser" = "󰾔" - mpv = "" - chatterino = "" - libreoffice-writer = "" - kitty = "" - "cyberpunk2077.exe" = "󰾲" - KiCad = "" - "[tT]hunar" = "" - "riotclientux.exe" = "󰰌" - libreoffice-calc = "" - "org.remmina.Remmina" = "󰢹" - "org.inkscape.Inkscape" = "󰕙" - "VirtualBox Machine" = "" - Bitwarden = "" - "[gG]imp-.*" = "" - Chromium = "" - obsidian = "󰠮" - "leagueclientux.exe" = "󰰌" - zathura = "󰈦" - code-oss = "󰨞" - codium-url-handler = "󰨞" - discord = "󰙯" - vesktop = "󰙯" - blueman-manager = "󰂯" - Alacritty = "" - zoom = "󰬡" - spotify = "" + [class] + VirtualBox = "" + steam = "󰓓" + "VirtualBox Manager" = "" + "com.obsproject.Studio" = "" + "[Ff]irefox" = "󰈹" + "[Tt]hunderbird" = "" + pcbnew = "" + ".*.exe" = "" + Element = "󰘨" + Signal = "󱅵" + Gimp = "" + VSCodium = "󰨞" + "[sS]potify" = "" + virt-manager = "" + lutris = "󰊗" + DEFAULT = "{class}" + "epicgameslauncher.exe" = "󰯷" + "[Cc]ode" = "󰨞" + "galaxyclient.exe" = "󰮡" + pavucontrol = "󰕾" + "Tor Browser" = "󰾔" + mpv = "" + chatterino = "" + libreoffice-writer = "" + kitty = "" + "cyberpunk2077.exe" = "󰾲" + KiCad = "" + "[tT]hunar" = "" + "riotclientux.exe" = "󰰌" + libreoffice-calc = "" + "org.remmina.Remmina" = "󰢹" + "org.inkscape.Inkscape" = "󰕙" + "VirtualBox Machine" = "" + Bitwarden = "" + "[gG]imp-.*" = "" + Chromium = "" + obsidian = "󰠮" + "leagueclientux.exe" = "󰰌" + zathura = "󰈦" + code-oss = "󰨞" + codium-url-handler = "󰨞" + discord = "󰙯" + vesktop = "󰙯" + blueman-manager = "󰂯" + Alacritty = "" + zoom = "󰬡" + spotify = "" - [class_active] - "(?i)ExampleOneTerm" = "icon" + [class_active] + "(?i)ExampleOneTerm" = "icon" - [initial_class] + [initial_class] - [initial_class_active] + [initial_class_active] - [workspaces_name] + [workspaces_name] - [title_in_class] + [title_in_class] - [title_in_class_active] + [title_in_class_active] - [title_in_initial_class] + [title_in_initial_class] - [title_in_initial_class_active] + [title_in_initial_class_active] - [initial_title_in_class] + [initial_title_in_class] - [initial_title] - "Spotify Premium" = "" + [initial_title] + "Spotify Premium" = "" - [initial_title_in_class_active] + [initial_title_in_class_active] - [initial_title_in_initial_class] + [initial_title_in_initial_class] - [initial_title_in_initial_class_active] + [initial_title_in_initial_class_active] - [exclude] - aProgram = "^$" - "" = "^$" - "(?i)fcitx" = ".*" - "[Ss]team" = "^(Friends List.*)?$" - "explorer.exe" = ".*" - "(?i)TestApp" = "" + [exclude] + aProgram = "^$" + "" = "^$" + "(?i)fcitx" = ".*" + "[Ss]team" = "^(Friends List.*)?$" + "explorer.exe" = ".*" + "(?i)TestApp" = "" - [format] - dedup = false - dedup_inactive_fullscreen = false - delim = " " - workspace = "{id}:{clients}" - workspace_empty = "{id}" - client = "{icon}" - client_fullscreen = "{icon}" - client_active = "{icon}" - client_dup = "{icon}{counter_sup}" - client_dup_active = "*{icon}*{delim}{icon}{counter_unfocused_sup}" - client_dup_fullscreen = "[{icon}]{delim}{icon}{counter_unfocused_sup}" - ''; + [format] + dedup = false + dedup_inactive_fullscreen = false + delim = " " + workspace = "{id}:{clients}" + workspace_empty = "{id}" + client = "{icon}" + client_fullscreen = "{icon}" + client_active = "{icon}" + client_dup = "{icon}{counter_sup}" + client_dup_active = "*{icon}*{delim}{icon}{counter_unfocused_sup}" + client_dup_fullscreen = "[{icon}]{delim}{icon}{counter_unfocused_sup}" + ''; + }; } diff --git a/home-modules/hyprland.nix b/home-modules/hyprland.nix index 5e9661f..356886a 100755 --- a/home-modules/hyprland.nix +++ b/home-modules/hyprland.nix @@ -46,9 +46,7 @@ let }; }; }; -in -lib.mkIf (user != "tv") -{ +in { home.packages = (with pkgs; [ # hyprland itself is a system package hyprland-protocols diff --git a/home-modules/kitty.nix b/home-modules/kitty.nix index 8def95c..8a99779 100755 --- a/home-modules/kitty.nix +++ b/home-modules/kitty.nix @@ -1,37 +1,32 @@ -{ config, pkgs, rice, lib, user, ... }: -lib.mkIf (user != "tv") +{ rice, ... }: { - home.packages = with pkgs; [ - kitty - ]; - programs.kitty = { enable = true; font = { name = rice.font.code.name2; package = rice.font.code.package; }; - settings = { - background = rice.color.background; - foreground = rice.color.foreground; - cursor = rice.color.foreground; - color0 = rice.color.black.base; - color8 = rice.color.black.bright; - color1 = rice.color.red.base; - color9 = rice.color.red.bright; - color2 = rice.color.green.base; - color10 = rice.color.green.bright; - color3 = rice.color.yellow.base; - color11 = rice.color.yellow.bright; - color4 = rice.color.blue.base; - color12 = rice.color.blue.bright; - color5 = rice.color.magenta.base; - color13 = rice.color.magenta.bright; - color6 = rice.color.cyan.base; - color14 = rice.color.cyan.bright; - color7 = rice.color.white.base; - color15 = rice.color.white.bright; - background_opacity = builtins.toString rice.transparency; + settings = with rice.color; { + background = background; + foreground = foreground; + cursor = foreground; + color0 = black.base; + color8 = black.bright; + color1 = red.base; + color9 = red.bright; + color2 = green.base; + color10 = green.bright; + color3 = yellow.base; + color11 = yellow.bright; + color4 = blue.base; + color12 = blue.bright; + color5 = magenta.base; + color13 = magenta.bright; + color6 = cyan.base; + color14 = cyan.bright; + color7 = white.base; + color15 = white.bright; + background_opacity = builtins.toString rice.transparency; window_padding_width = 5; remember_window_size = false; }; diff --git a/home-modules/mako.nix b/home-modules/mako.nix index 25431be..0d9e4c2 100755 --- a/home-modules/mako.nix +++ b/home-modules/mako.nix @@ -1,10 +1,6 @@ -{ pkgs, rice, lib, user, ... }: -lib.mkIf (user != "tv") +{ pkgs, rice, ... }: { - home.packages = [ - pkgs.mako - pkgs.libnotify - ]; + home.packages = with pkgs; [ libnotify ]; services.mako = with rice; { enable = true; defaultTimeout = 5000; # in ms diff --git a/home-modules/nx-gcal-event.nix b/home-modules/nx-gcal-event.nix index bc8f583..ac84f96 100755 --- a/home-modules/nx-gcal-event.nix +++ b/home-modules/nx-gcal-event.nix @@ -1,9 +1,6 @@ -{ config, pkgs, secrets, lib, user, ... }: -let - sep = " "; -in -lib.mkIf (user != "tv") -{ +{ config, pkgs, secrets, ... }: let + sep = " "; +in { home = { file."${config.xdg.dataHome}/nx-gcal-event-credentials.json".text = '' { @@ -26,7 +23,7 @@ lib.mkIf (user != "tv") # (pkgs.python311.withPackages (python-pkgs: [ # python-pkgs.google # ])) - (writeScriptBin "nx_gcal_event" '' + (writeScriptBin "nx_gcal_event" /* python */ '' #!${pkgs.python3}/bin/python3 import datetime import os diff --git a/home-modules/nx2site.nix b/home-modules/nx2site.nix index 89c0eae..821d1a0 100644 --- a/home-modules/nx2site.nix +++ b/home-modules/nx2site.nix @@ -1,5 +1,4 @@ -{ pkgs, lib, host, user, ... }: -lib.mkIf (host == "NxACE" && user != "tv") +{ pkgs, ... }: { home.packages = with pkgs; [ (writeShellApplication { diff --git a/home-modules/office.nix b/home-modules/office.nix index 91d866c..830f7c2 100755 --- a/home-modules/office.nix +++ b/home-modules/office.nix @@ -1,5 +1,4 @@ { config, pkgs, lib, user, ... }: -lib.mkIf (user != "tv") { home.packages = with pkgs; [ libreoffice diff --git a/home-modules/programming/python.nix b/home-modules/programming/python.nix index 871e903..da29ebd 100755 --- a/home-modules/programming/python.nix +++ b/home-modules/programming/python.nix @@ -1,21 +1,20 @@ -{ config, pkgs, lib, user, ... }: -let - python-with-packages = pkgs.python3.withPackages (pp: with pp; [ - ipython - pipdeptree - requests - google google-api-python-client google-auth-httplib2 google-auth-oauthlib - debugpy - black - ]); -in -lib.mkIf (user != "tv") +{ pkgs, ... }: { - home.packages = [ - python-with-packages - ]; - - home.sessionVariables = { - PYTHONPATH = "${python-with-packages}/${python-with-packages.sitePackages}"; + home = let + python-with-packages = pkgs.python3.withPackages (pp: with pp; [ + ipython + pipdeptree + requests + google google-api-python-client google-auth-httplib2 google-auth-oauthlib + debugpy + black + ]); + in { + packages = [ + python-with-packages + ]; + sessionVariables = { + PYTHONPATH = "${python-with-packages}/${python-with-packages.sitePackages}"; + }; }; } diff --git a/home-modules/qt.nix b/home-modules/qt.nix index b78e18d..130d3fa 100755 --- a/home-modules/qt.nix +++ b/home-modules/qt.nix @@ -1,5 +1,4 @@ { pkgs, lib, user, ... }: -lib.mkIf (user != "tv") { qt = { platformTheme = "gtk"; diff --git a/home-modules/rofi.nix b/home-modules/rofi.nix index 6b02510..b342b50 100755 --- a/home-modules/rofi.nix +++ b/home-modules/rofi.nix @@ -1,114 +1,113 @@ -{ pkgs, rice, lib, user, ... }: -let - trdr = "${rice.lib.float-to-drune rice.transparency}"; -in -lib.mkIf (user != "tv") -{ +{ pkgs, rice, ... }: { home.packages = with pkgs; [ rofi-wayland ]; - home.file.".config/rofi/config.rasi".text = '' - configuration { - show-icons: false; - display-drun: ""; - disable-history: false; - drun-display-format: "{name} [({generic})] [({exec})]"; - } + home.file = let + trdr = "${rice.lib.float-to-drune rice.transparency}"; + in with rice.color; { + ".config/rofi/config.rasi".text = '' + configuration { + show-icons: false; + display-drun: ""; + disable-history: false; + drun-display-format: "{name} [({generic})] [({exec})]"; + } - * { - font: "${rice.font.code.name2} 12"; - foreground: ${rice.color.foreground}; - background-color: ${rice.color.background}${trdr}; - padding: 0px; - margin: 0px; - spacing: 0px; - border-width: 0px; - } + * { + font: "${rice.font.code.name2} 12"; + foreground: ${foreground}; + background-color: ${background}${trdr}; + padding: 0px; + margin: 0px; + spacing: 0px; + border-width: 0px; + } - #window { - background-color: ${rice.color.background}${trdr}; - border: ${builtins.toString rice.border-width}px; - border-radius: ${builtins.toString rice.rounding}; - border-color: ${rice.color.border}; - } - #mainbox { - border: 0; - padding: 0; - } - #message { - border: 0px; - } - #textbox { - text-color: ${rice.color.foreground}; - } - #listview { - fixed-height: 0; - border: 0px; - spacing: 0px ; - scrollbar: false; - padding: 0px; - } + #window { + background-color: ${background}${trdr}; + border: ${builtins.toString rice.border-width}px; + border-radius: ${builtins.toString rice.rounding}; + border-color: ${border}; + } + #mainbox { + border: 0; + padding: 0; + } + #message { + border: 0px; + } + #textbox { + text-color: ${foreground}; + } + #listview { + fixed-height: 0; + border: 0px; + spacing: 0px ; + scrollbar: false; + padding: 0px; + } - #element { - border: 0; - padding: 0px; - border-radius: ${if rice.rounding > 0 then "2" else "0"}px; - } + #element { + border: 0; + padding: 0px; + border-radius: ${if rice.rounding > 0 then "2" else "0"}px; + } - #element.normal.normal { background-color: ${rice.color.background}${trdr}; text-color: ${rice.color.accent.base}; } - #element.selected.normal { background-color: ${rice.color.tertiary.base}${trdr}; text-color: ${rice.color.background}; } - #element.alternate.normal { background-color: ${rice.color.background}${trdr}; text-color: ${rice.color.secondary.base}; } + #element.normal.normal { background-color: ${background}${trdr}; text-color: ${accent.base}; } + #element.selected.normal { background-color: ${tertiary.base}${trdr}; text-color: ${background}; } + #element.alternate.normal { background-color: ${background}${trdr}; text-color: ${secondary.base}; } - #scrollbar { - width: ${builtins.toString rice.border-width}px ; - border: 0; - handle-width: 8px ; - padding: 0; - } - #sidebar { - border: ${builtins.toString rice.border-width}px dash; - } - #button.selected { - text-color: ${rice.color.foreground}; - } - #inputbar { - spacing: 0; - text-color: ${rice.color.background}; - background-color: ${rice.color.accent.base}${trdr}; - padding: 0; - margine-bottom: 2px; - children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; - } - #prompt { - spacing: 0; - background-color: transparent; - text-color: ${rice.color.foreground}; - } - #textbox-prompt-colon { - expand: false; - str: ">"; - margin: 0px 0.3em 0em 0em ; - text-color: ${rice.color.background}; - background-color: transparent; - } - #case-indicator { - spacing: 0; - text-color: ${rice.color.foreground}; - background-color: transparent; - } - #entry { - spacing: 0; - text-color: ${rice.color.background}; - background-color: transparent; - placeholder: ""; - } + #scrollbar { + width: ${builtins.toString rice.border-width}px ; + border: 0; + handle-width: 8px ; + padding: 0; + } + #sidebar { + border: ${builtins.toString rice.border-width}px dash; + } + #button.selected { + text-color: ${foreground}; + } + #inputbar { + spacing: 0; + text-color: ${background}; + background-color: ${accent.base}${trdr}; + padding: 0; + margine-bottom: 2px; + children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; + } + #prompt { + spacing: 0; + background-color: transparent; + text-color: ${foreground}; + } + #textbox-prompt-colon { + expand: false; + str: ">"; + margin: 0px 0.3em 0em 0em ; + text-color: ${background}; + background-color: transparent; + } + #case-indicator { + spacing: 0; + text-color: ${foreground}; + background-color: transparent; + } + #entry { + spacing: 0; + text-color: ${background}; + background-color: transparent; + placeholder: ""; + } - element-text, element-icon { - background-color: inherit; - text-color: inherit; - } - ''; + element-text, element-icon { + background-color: inherit; + text-color: inherit; + } + ''; + }; } diff --git a/home-modules/ssh.nix b/home-modules/ssh.nix index 5ad6d55..8420801 100755 --- a/home-modules/ssh.nix +++ b/home-modules/ssh.nix @@ -1,36 +1,32 @@ -{ config, pkgs, lib, system, user, allowed, secrets, ... }: -lib.mkIf (user != "tv") +{ pkgs, domain, ... }: { + home = { + packages = with pkgs; [ sshfs ]; + file.".ssh/config".text = '' + HOST nxace + HostName ${domain} + User nx2 + Port 50022 - home.packages = with pkgs; [ - sshfs - ]; + HOST nxacel + HostName 192.168.178.32 + User nx2 + Port 50022 + HOST nxrpi + HostName ${domain} + User pi + Port 50023 - home.file.".ssh/config".text = '' - HOST nxace - HostName nx2.site - User nx2 - Port 50022 - - HOST nxacel - HostName 192.168.178.32 - User nx2 - Port 50022 - - HOST nxrpi - HostName nx2.site - User pi - Port 50023 - - HOST nxrpil - HostName 192.168.178.31 - User pi - Port 50023 - - HOST nxgit - HostName git.nx2.site - User git - Port 20022 - ''; + HOST nxrpil + HostName 192.168.178.31 + User pi + Port 50023 + + HOST nxgit + HostName git.${domain} + User git + Port 20022 + ''; + }; } diff --git a/home-modules/starship.nix b/home-modules/starship.nix index e74fd6c..d48815a 100755 --- a/home-modules/starship.nix +++ b/home-modules/starship.nix @@ -1,10 +1,5 @@ -{ pkgs, lib, user, rice, ... }: -lib.mkIf (user != "tv") +{ lib, rice, ... }: { - home.packages = [ - pkgs.starship - ]; - programs.starship = { enable = true; # enableBashIntegration = true; diff --git a/home-modules/vale.nix b/home-modules/vale.nix index 2ba3557..6ec16f7 100644 --- a/home-modules/vale.nix +++ b/home-modules/vale.nix @@ -1,9 +1,6 @@ -{ pkgs, lib, user, ... }: -let +{ pkgs, ... }: let vws = pkgs.vale.withStyles (s: [ s.alex s.google ]); -in -lib.mkIf (user != "tv") -{ +in { home = { packages = [ vws diff --git a/home-modules/waybar.nix b/home-modules/waybar.nix index 289909f..b42b637 100755 --- a/home-modules/waybar.nix +++ b/home-modules/waybar.nix @@ -1,9 +1,6 @@ -{ lib, pkgs, user, rice, ... }: -let +{ lib, pkgs, user, rice, ... }: let sep = " "; -in -lib.mkIf (user != "tv") -{ +in { home.packages = let waybar_mode_script = /*bash*/ '' @@ -100,10 +97,10 @@ lib.mkIf (user != "tv") exec = "cclock"; restart-interval = 60; }; - "custom/ctimeremaining" = { - exec = "nx_gcal_event lookup"; - restart-interval = 60; - }; + # "custom/ctimeremaining" = { + # exec = "nx_gcal_event lookup"; + # restart-interval = 60; + # }; "custom/mode" = { exec = "cat /tmp/waybar-mode"; interval = "once"; @@ -184,7 +181,6 @@ lib.mkIf (user != "tv") #clock, #custom-cclock, - #custom-ctimeremaining, #custom-mode, #battery, #cpu, diff --git a/home-modules/wlogout.nix b/home-modules/wlogout.nix index 21c0f61..c005efe 100755 --- a/home-modules/wlogout.nix +++ b/home-modules/wlogout.nix @@ -1,98 +1,85 @@ -{ config, pkgs, lib, user, rice,... }: -lib.mkIf (user != "tv") +{ pkgs, rice,... }: { - home.packages = with pkgs; [ - wlogout - ]; + home = { + packages = with pkgs; [ wlogout ]; + file = { + ".config/wlogout/style.css".text = /* css */ '' + * { all: unset; } - home.file.".config/wlogout/style.css".text = '' - * { all: unset; } + window { + font-family: ${rice.font.code.name}, monospace; + font-size: 12pt; + color: ${rice.color.foreground}; + background-color: rgba(0, 0, 0, ${builtins.toString rice.transparency}); + } - window { - font-family: ${rice.font.code.name}, monospace; - font-size: 12pt; - color: ${rice.color.foreground}; - background-color: rgba(0, 0, 0, ${builtins.toString rice.transparency}); - } + button { + transition: box-shadow 0.2s ease-in-out, background-color 0.2s ease-in-out; + text-shadow: none; + border: none; + color: ${rice.color.foreground}; + background-color: ${rice.color.background}; + margin: 5px; + } - button { - transition: box-shadow 0.2s ease-in-out, background-color 0.2s ease-in-out; - text-shadow: none; - border: none; - color: ${rice.color.foreground}; - background-color: ${rice.color.background}; - margin: 5px; - } + button:hover { + color: ${rice.color.blue.base}; + } - button:hover { - color: ${rice.color.blue.base} ; - } - - button:focus { - color: ${rice.color.blue.base} ; - } - ''; - - home.file.".config/wlogout/layout".text = '' - { - "label": "lock", - "action": "hyprlock", - "text": "[L]ock", - "height": 0, - "width": 0, - "keybind": "l" - } - { - "label": "reboot", - "action": "systemctl reboot", - "text": "[R]eboot", - "height": 0, - "width": 0, - "keybind": "r" - } - { - "label": "shutdown", - "action": "systemctl poweroff", - "text": "[S]hutdown", - "height": 0, - "width": 0, - "keybind": "s" - } - { - "label": "logout", - "action": "hyprctl dispatch exit 0", - "text": "Lo[g]out", - "height": 0, - "width": 0, - "keybind": "g" - } - { - "label": "suspend", - "action": "systemctl suspend", - "text": "S[u]spend", - "height": 0, - "width": 0, - "keybind": "u" - } - { - "label": "hibernate", - "action": "systemctl hibernate", - "text": "[H]ibernate", - "height": 0, - "width": 0, - "keybind": "h" - } - ''; - # lock { background-image: image(url("./lock.png")); } - # lock:focus { background-image: image(url("./lock-hover.png")); } - # logout { background-image: image(url("./logout.png")); } - # logout:focus { background-image: image(url("./logout-hover.png")); } - # suspend { background-image: image(url("./suspend.png")); } - # suspend:focus { background-image: image(url("./suspend-hover.png")); } - # shutdown { background-image: image(url("./power.png")); } - # shutdown:focus { background-image: image(url("./power-hover.png")); } - # reboot { background-image: image(url("./restart.png")); } - # reboot:focus { background-image: image(url("./restart-hover.png")); } - # hibernate { background-image: image(url("./hibernate.png")); } - # hibernate:hover { background-image: image(url("./hibernate-hover.png"));} + button:focus { + color: ${rice.color.blue.base}; + } + ''; + ".config/wlogout/layout".text = /* json */ '' + { + "label": "lock", + "action": "hyprlock", + "text": "[L]ock", + "height": 0, + "width": 0, + "keybind": "l" + } + { + "label": "reboot", + "action": "systemctl reboot", + "text": "[R]eboot", + "height": 0, + "width": 0, + "keybind": "r" + } + { + "label": "shutdown", + "action": "systemctl poweroff", + "text": "[S]hutdown", + "height": 0, + "width": 0, + "keybind": "s" + } + { + "label": "logout", + "action": "hyprctl dispatch exit 0", + "text": "Lo[g]out", + "height": 0, + "width": 0, + "keybind": "g" + } + { + "label": "suspend", + "action": "systemctl suspend", + "text": "S[u]spend", + "height": 0, + "width": 0, + "keybind": "u" + } + { + "label": "hibernate", + "action": "systemctl hibernate", + "text": "[H]ibernate", + "height": 0, + "width": 0, + "keybind": "h" + } + ''; + }; + }; } diff --git a/home-modules/yazi.nix b/home-modules/yazi.nix index b7a9709..3909965 100755 --- a/home-modules/yazi.nix +++ b/home-modules/yazi.nix @@ -1,6 +1,5 @@ -{ pkgs, lib, system, user, rice, inputs, ... }: -lib.mkIf (user != "tv") +{ pkgs, system, rice, inputs, ... }: { home.packages = with pkgs; [ # yazi diff --git a/home-modules/zoxide.nix b/home-modules/zoxide.nix index 29c3490..330d31b 100755 --- a/home-modules/zoxide.nix +++ b/home-modules/zoxide.nix @@ -1,5 +1,4 @@ -{ config, pkgs, lib, user, ... }: -lib.mkIf (user != "tv") +{ pkgs, ... }: { home.packages = [ pkgs.zoxide diff --git a/home.nix b/home.nix index 3d90feb..c2b0231 100755 --- a/home.nix +++ b/home.nix @@ -27,7 +27,7 @@ ./home-modules/nh.nix ./home-modules/nvidia.nix ./home-modules/nx2site.nix - ./home-modules/nx-gcal-event.nix + # ./home-modules/nx-gcal-event.nix ./home-modules/obs.nix ./home-modules/office.nix ./home-modules/ollama.nix diff --git a/system-modules/boot.nix b/system-modules/boot.nix index 7757332..3b4fa99 100755 --- a/system-modules/boot.nix +++ b/system-modules/boot.nix @@ -1,7 +1,7 @@ -{ config, pkgs, pkgs-unstable, lib, host, inputs, ... }: +{ config, pkgs, pkgs-unstable, lib, host, domain, inputs, ... }: let grub-theme-ascii-diana = (pkgs.fetchFromGitea { - domain = "git.nx2.site"; + domain = "git.${domain}"; owner = "nx2"; repo = "grub-theme-ascii-diana"; rev = "0.5.0"; diff --git a/system-modules/dm.nix b/system-modules/dm.nix index e1102ff..3cf01d5 100755 --- a/system-modules/dm.nix +++ b/system-modules/dm.nix @@ -1,5 +1,4 @@ -{ pkgs, user, host, lib, ... }: -if (host != "NxACE") then +{ pkgs, user, ... }: { services.greetd = { enable = true; @@ -22,27 +21,4 @@ if (host != "NxACE") then TTYVHangup = true; TTYVTDisallocate = true; }; -} -else -{ - services = { - displayManager = { - defaultSession = "hyprland"; - sddm = { - enable = true; - # theme = "where_is_my_sddm_theme"; - settings = { - theme = { - # background = /home/nx2/Pictures/ - passwordFontSize = 12; - passwordInputCursorVisible = true; - }; - }; - }; - autoLogin = lib.mkIf (host == "NxACE") { - enable = true; - user = "tv"; - }; - }; - }; } diff --git a/system-modules/gitea.nix b/system-modules/gitea.nix new file mode 100644 index 0000000..bc24df1 --- /dev/null +++ b/system-modules/gitea.nix @@ -0,0 +1,6 @@ +{ pkgs, ... }: +{ + services.gitea = { + enable = true; + }; +} diff --git a/system-modules/nx2site.nix b/system-modules/nx2site.nix index c314758..65b188d 100644 --- a/system-modules/nx2site.nix +++ b/system-modules/nx2site.nix @@ -1,272 +1,186 @@ -{ config, pkgs, lib, user, host, secrets, ... }: -# lib.mkIf false -lib.mkIf (host == "NxACE" && user != "tv") +{ config, pkgs, domain, secrets, ... }: { sops.secrets = { - "nx2site/namecheap.pw" = { }; - # "nx2site/cloudflare/api-token-dns-edit" = { }; - "nx2site/cloudflare/global-api-key" = { }; - }; + "nx2site/namecheap.pw" = { }; + # "nx2site/cloudflare/api-token-dns-edit" = { }; + "nx2site/cloudflare/global-api-key" = { }; + }; - systemd = { - timers."dynamic-dns" = { - wantedBy = [ "timers.target" ]; - timerConfig = { - OnBootSec = "2m"; - OnUnitActiveSec = "10m"; - Unit = "dynamic-dns.service"; - }; - }; - # services."dynamic-dns" = let - # u = let - # domain = "nx2.site"; - # passord-file-path = config.sops.secrets."nx2site/namecheap.pw".path; - # log-file-path = "/var/log/update_namecheap.log"; - # count-file-path = "/var/log/update_namecheap-count.txt"; - # in pkgs.writers.writePython3Bin "update_namecheap" { - # libraries = with pkgs.python311Packages; [ requests ]; - # flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" ]; - # } '' - # import requests - # import argparse - # import socket - # from datetime import datetime - - # def get_public_ip(): return requests.get('https://ipinfo.io/ip').text.strip() - - # def get_dns_ip(): return socket.gethostbyname_ex('${domain}')[2][0] - - # def main(force_update): - # my_ip = get_public_ip() - # dns_ip = get_dns_ip() - - # with open("${count-file-path}", "r") as f: - # content = f.read() - # if content == "": count = 0 - # else: count = int(content) - # count += 1 - # with open("${count-file-path}", "w") as f: - # f.write(str(count)) - - # if not (force_update or my_ip != dns_ip): - # print(f"Host IP and DNS response are both {my_ip} --> No Action") - # exit(0) - # else: - # with open("${passord-file-path}", 'r') as pw_file: pw = pw_file.read().strip() - - # # Perform DNS updates - # resp_base = requests.get(f"https://dynamicdns.park-your-domain.com/update?host=@&domain=${domain}&password={pw}&ip={my_ip}") - # resp_subd = requests.get(f"https://dynamicdns.park-your-domain.com/update?host=*&domain=${domain}&password={pw}&ip={my_ip}") - - # # Reset the count file - # with open("${count-file-path}", 'w') as f: f.write('0') - - # now_str = datetime.now().strftime('%Y/%m/%d-%R') - # log_entry = f"At {now_str} - from {dns_ip} to {my_ip} - {count} times - Response {resp_base.status_code}{' - (forced)' if force_update else ' '}\n" - # print(log_entry, end="") - # with open("${log-file-path}", 'a') as log_file: log_file.write(log_entry) - - # if __name__ == "__main__": - # parser = argparse.ArgumentParser() - # parser.add_argument('-f', '--force', action='store_true', help='Force update') - # args = parser.parse_args() - - # main(args.force) - # ''; - # in { - # script = '' - # set -eu - # ${u}/bin/update_namecheap - # ''; - # serviceConfig = { - # Type = "oneshot"; - # }; - services."dynamic-dns" = let - u = let - domain = "nx2.site"; - account_id = secrets.email.gmail-online.mail; - zone_id = "33fecab36e060f49d492127345ea95a0"; - record_id = { - base = "58d3412e8d88889d1a611b3669f0700f"; - sub = "fc861353142bc05d5dbad1799178e6a1"; - base6 = "d1b90e21d2d747dcb30448bd65312927"; - sub6 = "b8082b7afe9e80971fc9f9dda16ec284"; - }; - passord-file-path = config.sops.secrets."nx2site/cloudflare/global-api-key".path; - log-file-path = "/var/log/couldflare.log"; - count-file-path = "/var/log/cloudflare-count.txt"; - in pkgs.writers.writePython3Bin "dyn_dns" { - libraries = with pkgs.python311Packages; [ requests ]; - flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" "E121" "E261" "E303"]; - } '' - import requests - import subprocess - from datetime import datetime - - def get_public_ip(ipv6=False): - return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip() - - def main(): - my_ip = get_public_ip() - my_ip6 = get_public_ip(ipv6=True) - - with open("${count-file-path}", "r") as f: - content = f.read() - if content == "": count = 0 - else: count = int(content) - count += 1 - with open("${count-file-path}", "w") as f: - f.write(str(count)) - - # 4 - with open("${passord-file-path}", 'r') as pw_file: - pw = pw_file.read().strip() - - # Perform DNS updates - # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record - resp_base = requests.patch( - 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.base}', - headers={ - 'Content-Type': 'application/json', - 'X-Auth-Email': '${account_id}', - 'X-Auth-Key': pw - }, - json={ - "comment": "Domain verification record", - "name": "${domain}", - "proxied": True, - "settings": {}, - "tags": [], - "ttl": 1, # automatic - "content": my_ip, - "type": "A" - } - ) - - resp_subd = requests.patch( - 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.sub}', - headers={ - 'Content-Type': 'application/json', - 'X-Auth-Email': '${account_id}', - 'X-Auth-Key': pw - }, - json={ - "comment": "Domain verification record", - "name": "${domain}", - "proxied": True, - "settings": {}, - "tags": [], - "ttl": 1, # automatic - "content": my_ip, - "type": "A" - } - ) - - if resp_base.status_code != 200: - print(resp_base.text) - - - now_str = datetime.now().strftime('%Y/%m/%d-%R') - log_entry = f"At {now_str} - to {my_ip} - Response {resp_base.status_code}\n" - print(log_entry, end="") - with open("${log-file-path}", 'a') as log_file: - log_file.write(log_entry) - - # Perform DNS updates - # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record - resp_base = requests.patch( - 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.base6}', - headers={ - 'Content-Type': 'application/json', - 'X-Auth-Email': '${account_id}', - 'X-Auth-Key': pw - }, - json={ - "comment": "Domain verification record", - "name": "${domain}", - "proxied": True, - "settings": {}, - "tags": [], - "ttl": 1, # automatic - "content": my_ip6, - "type": "AAAA" - } - ) - - resp_subd = requests.patch( - 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.sub6}', - headers={ - 'Content-Type': 'application/json', - 'X-Auth-Email': '${account_id}', - 'X-Auth-Key': pw - }, - json={ - "comment": "Domain verification record", - "name": "${domain}", - "proxied": True, - "settings": {}, - "tags": [], - "ttl": 1, # automatic - "content": my_ip6, - "type": "AAAA" - } - ) - - if resp_base.status_code != 200: - print(resp_base.text) - - - now_str = datetime.now().strftime('%Y/%m/%d-%R') - log_entry = f"At {now_str} - to {my_ip6} - Response {resp_base.status_code}\n" - print(log_entry, end="") - with open("${log-file-path}", 'a') as log_file: log_file.write(log_entry) - - if __name__ == "__main__": - main() - ''; - in { - script = '' - set -eu - ${u}/bin/dyn_dns - ''; - serviceConfig = { - Type = "oneshot"; - User = "root"; - }; + systemd = { + timers."dynamic-dns" = { + wantedBy = [ "timers.target" ]; + timerConfig = { + OnBootSec = "2m"; + OnUnitActiveSec = "10m"; + Unit = "dynamic-dns.service"; }; }; - # I can't use this becasue API Access for Namecheap needs a static whitelisted IP, which I don't have - # security.acme = { - # acceptTerms = true; - # certs."nx2site" = { }; - # }; - environment.systemPackages = with pkgs; [ - certbot - (writeShellApplication { - name = "refresh_ssl_certificate"; - runtimeInputs = [ certbot ]; - # https://forum.endeavouros.com/t/tutorial-add-a-systemd-boot-loader-menu-entry-for-a-windows-installation-using-a-separate-esp-partition/37431 - text = let - webroot = /home/nx2/nx2site/staticweb/content; - in /*bash*/ '' - cartbot - ls ${webroot} - ''; - }) - ]; - networking.hosts = { # docker network inspect nx2site_default | grep -E "Name|IPv4" | tr "\n" " " | sed -r 's- +- -g;s-\n?"Name": -\n-g' | sed -r '1d;2d;s-"(.+?)", "IPv4Address": "(.+)/16",- "\2" = [ "\1.docker" ];-g' - "172.1.2.1" = [ "staticweb.docker" ]; - "172.1.3.1" = [ "matrix.docker" ]; - # "172.1.0.9" = [ "matrixdb.docker" ]; - "172.1.4.1" = [ "matrix-ss.docker" ]; - # "172.1.0.7" = [ "matrix-ssdb.docker" ]; - "172.1.5.1" = [ "pw.docker" ]; - "172.1.6.1" = [ "git.docker" ]; - # "172.1.0.10" = [ "gitdb.docker" ]; - "172.1.7.1" = [ "nn.docker" ]; - "172.1.8.1" = [ "llm.docker" ]; - # "172.1.9.1" = [ "proxy.docker" ]; - "172.1.10.1" = [ "share.docker" ]; - "172.1.11.1" = [ "odq.docker" ]; + services."dynamic-dns" = let + u = let + account_id = secrets.email.gmail-online.mail; + zone_id = "33fecab36e060f49d492127345ea95a0"; + record_id = { + base = "58d3412e8d88889d1a611b3669f0700f"; + sub = "fc861353142bc05d5dbad1799178e6a1"; + base6 = "d1b90e21d2d747dcb30448bd65312927"; + sub6 = "b8082b7afe9e80971fc9f9dda16ec284"; + }; + passord-file-path = config.sops.secrets."nx2site/cloudflare/global-api-key".path; + log-file-path = "/var/log/couldflare.log"; + count-file-path = "/var/log/cloudflare-count.txt"; + in pkgs.writers.writePython3Bin "dyn_dns" { + libraries = with pkgs.python311Packages; [ requests ]; + flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" "E121" "E261" "E303"]; + } /* python */ '' + import requests + import subprocess + from datetime import datetime + + def get_public_ip(ipv6=False): + return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip() + + def main(): + my_ip = get_public_ip() + my_ip6 = get_public_ip(ipv6=True) + + with open("${count-file-path}", "r") as f: + content = f.read() + if content == "": count = 0 + else: count = int(content) + count += 1 + with open("${count-file-path}", "w") as f: + f.write(str(count)) + + # 4 + with open("${passord-file-path}", 'r') as pw_file: + pw = pw_file.read().strip() + + # Perform DNS updates + # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record + resp_base = requests.patch( + 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.base}', + headers={ + 'Content-Type': 'application/json', + 'X-Auth-Email': '${account_id}', + 'X-Auth-Key': pw + }, + json={ + "comment": "Domain verification record", + "name": "${domain}", + "proxied": True, + "settings": {}, + "tags": [], + "ttl": 1, # automatic + "content": my_ip, + "type": "A" + } + ) + + resp_subd = requests.patch( + 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.sub}', + headers={ + 'Content-Type': 'application/json', + 'X-Auth-Email': '${account_id}', + 'X-Auth-Key': pw + }, + json={ + "comment": "Domain verification record", + "name": "${domain}", + "proxied": True, + "settings": {}, + "tags": [], + "ttl": 1, # automatic + "content": my_ip, + "type": "A" + } + ) + + if resp_base.status_code != 200: + print(resp_base.text) + + + now_str = datetime.now().strftime('%Y/%m/%d-%R') + log_entry = f"At {now_str} - to {my_ip} - Response {resp_base.status_code}\n" + print(log_entry, end="") + with open("${log-file-path}", 'a') as log_file: + log_file.write(log_entry) + + # Perform DNS updates + # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record + resp_base = requests.patch( + 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.base6}', + headers={ + 'Content-Type': 'application/json', + 'X-Auth-Email': '${account_id}', + 'X-Auth-Key': pw + }, + json={ + "comment": "Domain verification record", + "name": "${domain}", + "proxied": True, + "settings": {}, + "tags": [], + "ttl": 1, # automatic + "content": my_ip6, + "type": "AAAA" + } + ) + + resp_subd = requests.patch( + 'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.sub6}', + headers={ + 'Content-Type': 'application/json', + 'X-Auth-Email': '${account_id}', + 'X-Auth-Key': pw + }, + json={ + "comment": "Domain verification record", + "name": "${domain}", + "proxied": True, + "settings": {}, + "tags": [], + "ttl": 1, # automatic + "content": my_ip6, + "type": "AAAA" + } + ) + + if resp_base.status_code != 200: + print(resp_base.text) + + + now_str = datetime.now().strftime('%Y/%m/%d-%R') + log_entry = f"At {now_str} - to {my_ip6} - Response {resp_base.status_code}\n" + print(log_entry, end="") + with open("${log-file-path}", 'a') as log_file: log_file.write(log_entry) + + if __name__ == "__main__": + main() + ''; + in { + script = '' + set -eu + ${u}/bin/dyn_dns + ''; + serviceConfig = { + Type = "oneshot"; + User = "root"; + }; }; - } + }; + networking.hosts = { # docker network inspect nx2site_default | grep -E "Name|IPv4" | tr "\n" " " | sed -r 's- +- -g;s-\n?"Name": -\n-g' | sed -r '1d;2d;s-"(.+?)", "IPv4Address": "(.+)/16",- "\2" = [ "\1.docker" ];-g' + # "172.1.2.1" = [ "staticweb.docker" ]; + # "172.1.3.1" = [ "matrix.docker" ]; + # "172.1.0.9" = [ "matrixdb.docker" ]; + # "172.1.4.1" = [ "matrix-ss.docker" ]; + # "172.1.0.7" = [ "matrix-ssdb.docker" ]; + "172.1.5.1" = [ "pw.docker" ]; + "172.1.6.1" = [ "git.docker" ]; + # "172.1.0.10" = [ "gitdb.docker" ]; + # "172.1.7.1" = [ "nn.docker" ]; + # "172.1.8.1" = [ "llm.docker" ]; + # "172.1.9.1" = [ "proxy.docker" ]; + # "172.1.10.1" = [ "share.docker" ]; + # "172.1.11.1" = [ "odq.docker" ]; + }; +} diff --git a/system-modules/nx2site/proxy.nix b/system-modules/nx2site/proxy.nix index b62493d..c2a4a77 100644 --- a/system-modules/nx2site/proxy.nix +++ b/system-modules/nx2site/proxy.nix @@ -1,4 +1,4 @@ -{ config, pkgs, lib, user, ... }: +{ config, pkgs, lib, domain, ... }: { sops.secrets = { "nx2site/sslCertificate.pem" = { owner = config.services.nginx.user; }; @@ -8,13 +8,13 @@ security.acme = { acceptTerms = true; defaults = { - email = "acme@nx2.site"; + email = "acme@${domain}"; webroot = "/var/nginx/webroot"; group = "nginx"; }; certs = { - "nx2.site" = { - extraDomainNames = [ "git.nx2.site" "pw.nx2.site" ]; + "${domain}" = { + extraDomainNames = builtins.map (subd: "${subd}.${domain}") [ "git" "git2" "pw" "pw2" "sync" ]; }; }; }; @@ -29,40 +29,28 @@ isNormalUser = false; }; systemd.services.nginx.serviceConfig.ProtectHome = "read-only"; - services.nginx = { + services.nginx = let + dl = [ + { addr = "0.0.0.0"; port = 443; ssl = true; } + { addr = "0.0.0.0"; port = 80; ssl = false; } + { addr = "[::0]"; port = 443; ssl = true; } + { addr = "[::0]"; port = 80; ssl = false; } + ]; + in { enable = true; user = "nginx"; group = "nginx"; additionalModules = []; # appendConfig = ''''; clientMaxBodySize = "20m"; - defaultHTTPListenPort = 80; defaultListenAddresses = [ "0.0.0.0" ] ++ lib.optional config.networking.enableIPv6 "[::0]"; - defaultListen = [ - { - addr = "0.0.0.0"; - ssl = true; - port = 443; - proxyProtocol = true; - } - { - addr = "[::0]"; - ssl = true; - port = 443; - proxyProtocol = true; - } - ]; + defaultListen = dl; defaultMimeTypes = "${pkgs.mailcap}/etc/nginx/mime.types"; defaultSSLListenPort = 443; enableQuicBPF = true; enableReload = true; - # eventsConfig = ''''; - # logError = ; - # mapHashBucketSize = ; - # mapHashMaxSize = ; package = pkgs.nginxQuic; - # preStart = true; proxyResolveWhileRunning = false; proxyTimeout = "20s"; recommendedBrotliSettings = true; @@ -72,27 +60,12 @@ recommendedTlsSettings = true; recommendedZstdSettings = true; serverTokens = false; - # sslCiphers = # useing default; sslDhparam = config.sops.secrets."nx2site/dhparams.pem".path; sslProtocols = "TLSv1.2 TLSv1.3"; statusPage = false; streamConfig = ""; # udp config validateConfigFile = true; - upstreams = { - "staticweb".servers = { "staticweb.docker:80" = {}; }; - "matrix".servers = { "matrix.docker:80" = {}; }; - "matrix-ss".servers = { "matrix-ss.docker:80" = {}; }; - "pw".servers = { "pw.docker:80" = {}; }; - "git".servers = { "git.docker:3000" = {}; }; - "nn".servers = { "nn.docker:80" = {}; }; - "llm".servers = { "llm.docker:80" = {}; }; - "share".servers = { "share.docker:80" = {}; }; - - "sync".servers = { "localhost:8384" = {}; }; - }; virtualHosts = let - # sslCertificate = config.sops.secrets."nx2site/sslCertificate.pem".path; - # sslCertificateKey = config.sops.secrets."nx2site/sslCertificateKey.pem".path; vh = { kTLS = true; http2 = true; @@ -102,21 +75,13 @@ addSSL = true; enableACME = true; }; - dl = [ - { addr = "0.0.0.0"; port = 443; ssl = true; } - { addr = "0.0.0.0"; port = 80; ssl = false; } - { addr = "[::0]"; port = 443; ssl = true; } - { addr = "[::0]"; port = 80; ssl = false; } - ]; in { - "nx2.site" = vh // { + "${domain}" = vh // { root = "/var/nginx/webroot"; default = true; listen = dl; locations = { "/" = { - # index = "index.html"; - # tryFiles = "$uri/ $uri.html =404"; extraConfig = '' index index.html; if ($request_uri ~ ^/(.*)\.html(\?|$)) { @@ -125,115 +90,51 @@ try_files $uri $uri.html $uri/ /404.html =404; ''; }; - "~^(/ba)$" = { - return = "301 /BA.pdf"; - }; - "/.well-known/matrix/client" = { - return = "502"; - # return = ''200 '{"m.homeserver": {"base_url": "https://matrix.nx2.site"}, "org.matrix.msc3575.proxy": {"url": "https://matrix-ss.nx2.site"}}' ''; - # extraConfig = builtins.concatStringsSep "\n" [ "default_type application/json;" "add_header Access-Control-Allow-Origin *;" ]; - }; - "/.well-known/matrix/server" = { - return = "502"; - # return = ''200 '{"m.server":"matrix.nx2.site:443"}' ''; - # extraConfig = builtins.concatStringsSep "\n" [ "default_type application/json;" "add_header Access-Control-Allow-Origin *;" ]; - }; - # "~ ^/(client/|_matrix/client/unstable/org.matrix.msc3575/sync)" = { - # proxyPass = "http://matrix-ss"; - # # extraConfig = [ ''proxy_set_header X-Forwarded-For $remote_addr;'' ''proxy_set_header X-Forwarded-Proto $scheme;'' ''proxy_set_header Host $host;'' ]; - # }; - # "~ ^(\/_matrix|\/_synapse\/client)" = { - # return = ''200 '{"m.server":"matrix.nx2.site:443"}' ''; - # # extraConfig = []; - # }; + "~^(/ba)$" = { return = "301 /BA.pdf"; }; + "/.well-known/matrix/client" = { return = "502"; }; + "/.well-known/matrix/server" = { return = "502"; }; }; }; - "matrix.nx2.site" = { - listen = dl ++ [ - # { addr = "0.0.0.0"; port = 8448; ssl = true; } - # { addr = "0.0.0.0"; port = 8448; ssl = true; } - ]; - locations = { - # "/" = { -# proxyPass = "http://matrix"; -# # extraConfig = [ ''add_header Alt-Svc 'h3=":443"; ma=86400';'' ''add_header Cache-Control "public";'' ] ++ common-location-conf; -# }; - "~.*" = { return = "502"; }; - }; - }; -# "matrix-ss.nx2.site" = { -# inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic addSSL enableACME; -# # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; -# # "resolver 1.1.1.1;" -# # "client_max_body_size 500M;" -# # ]; -# locations = { -# "/" = { proxyPass = "http://pw"; }; -# }; -# }; -# # "dev.nx2.site" = { -# # inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic addSSL enableACME; -# # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; -# # locations = { -# # "/" = { -# # proxyPass = "http://dev"; -# # }; -# # }; -# # }; - "pw.nx2.site" = vh // { - # inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic addSSL enableACME; - # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + "matrix.${domain}" = { listen = dl; - locations = { - "/" = { proxyPass = "http://pw"; }; - "/admin" = { proxyPass = "http://pw"; }; - "/notifications/hub" = { proxyPass = "http://pw"; }; - "/notifications/hub/negotiate" = { proxyPass = "http://pw"; }; - }; + locations = { "~.*" = { return = "502"; }; }; }; -# "share.nx2.site" = { -# inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic addSSL enableACME; -# # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; -# locations = { -# "/" = { proxyPass = "http://share"; # ''proxy_hide_header Content-Disposition;'' -# # ''proxy_set_header Content-Disposition $upstream_http_content_disposition;'' -# # ''proxy_set_header X-Real-IP $remote_addr;'' -# # ''proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;'' -# # ''proxy_set_header Host $http_host;'' -# # ]; -# }; -# "/socket.io" = { -# proxyPass = "http://share/socket.io"; -# proxyWebsockets = true; -# # extraConfig = [ -# # ''proxy_http_version 1.1;'' -# # ''proxy_set_header Upgrade $http_upgrade;'' -# # ''proxy_set_header Connection "upgrade";'' -# # ]; -# }; -# }; -# }; -# "sync.nx2.site" = { -# inherit sslCertificate sslCertificateKey kTLS http2 http3 http3_hq quic addSSL enableACME; -# # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; -# locations = { -# "/" = { proxyPass = "http://sync"; }; -# }; -# }; - "git.nx2.site" = vh // { - # listen = [ { addr = "0.0.0.0"; port = 443; ssl = true; } ]; + "pw.${domain}" = vh // { listen = dl; - locations = { - "/" = { proxyPass = "http://git"; }; + locations = let d = "pw.docker:80"; in { + "/" = { proxyPass = "http://${d}"; }; + "/admin" = { proxyPass = "http://${d}"; }; + "/notifications/hub" = { proxyPass = "http://${d}"; }; + "/notifications/hub/negotiate" = { proxyPass = "http://${d}"; }; }; }; - "~^(.*).nx2.site$" = { + "pw2.${domain}" = vh // { + listen = dl; + locations = let d = "127.0.0.1:8222"; in { + "/" = { proxyPass = "http://${d}"; }; + "/admin" = { proxyPass = "http://${d}"; }; + "/notifications/hub" = { proxyPass = "http://${d}"; }; + "/notifications/hub/negotiate" = { proxyPass = "http://${d}"; }; + }; + }; + "sync.${domain}" = vh // { + listen = dl; + locations = { "/" = { proxyPass = "http://127.0.0.1:11434"; }; }; + }; + "git.${domain}" = vh // { + listen = dl; + locations = { "/" = { proxyPass = "http://git.docker:3000"; }; }; + }; + "git2.${domain}" = vh // { + listen = dl; + locations = { "/" = { proxyPass = "http://127.0.0.1:8222"; }; }; + }; + "~^(.*).${domain}$" = { listen = dl; root = "/var/nginx/webroot"; - locations = { - "~.*" = { return = "301 https://nx2.site/502.html"; }; - }; + locations = { "~.*" = { return = "301 https://${domain}/502.html"; }; }; }; }; }; } + diff --git a/system-modules/syncthing.nix b/system-modules/syncthing.nix index 2122857..9c316c9 100644 --- a/system-modules/syncthing.nix +++ b/system-modules/syncthing.nix @@ -1,5 +1,10 @@ -{ config, lib, user, host, secrets, ...}: -let +{ + config, + lib, + user, + host, + secrets, +... }: let # helper funcitons conv = _: device: with device; { "${name}" = {id = id;};}; justname = devices: (builtins.map (device: device.name)) devices; @@ -24,15 +29,11 @@ let daniel-dcim = { name = "daniel-dcim"; path = "/vault/Pictures/Daniel"; }; tessa-dcim = { name = "tessa-dcim"; path = "/vault/Pictures/Tessa"; }; }; -in -lib.mkIf (user != "tv") -{ - +in { sops.secrets = { "syncthing/${host}/cert.pem" = { owner = user; }; "syncthing/${host}/key.pem" = { owner = user; }; }; - services.syncthing = with (builtins.mapAttrs conv devices); { enable = true; user = "${user}"; diff --git a/system-modules/users.nix b/system-modules/users.nix index bc092ac..a065b4f 100755 --- a/system-modules/users.nix +++ b/system-modules/users.nix @@ -11,12 +11,6 @@ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID1RPCcS8DtIf75a2FEW4d8X6WTVeLlmretoLqppvZlJ" # From [A] GPG Sub Key ]; }; - users.users.tv = lib.mkIf (host == "NxACE") { - isNormalUser = true; - extraGroups = [ "networkmanager" "audio" "video" "uinput" ]; - useDefaultShell = true; - }; - programs = { bash = {