diff --git a/flake.lock b/flake.lock index ff07f8a..b60d446 100644 --- a/flake.lock +++ b/flake.lock @@ -1416,17 +1416,14 @@ ] }, "locked": { - "lastModified": 1760422027, - "narHash": "sha256-UAuVT+mL9Q6hABWWlRhFfJ51DMrG3L/xdJTT3+FgCjM=", - "owner": "dachxy", - "repo": "nix-mail-server", - "rev": "a9df5bb2406f45b1d878f8b5681d8710a5cf40fb", - "type": "github" + "lastModified": 1761409875, + "narHash": "sha256-tTVQsRHO1c/c3rpeHXuYV+HLulv2J3ZLR3c32nSWyas=", + "path": "/home/danny/projects/nix-mail-server", + "type": "path" }, "original": { - "owner": "dachxy", - "repo": "nix-mail-server", - "type": "github" + "path": "/home/danny/projects/nix-mail-server", + "type": "path" } }, "marks-nvim": { diff --git a/home/presets/basic.nix b/home/presets/basic.nix index ce1de11..f65820b 100644 --- a/home/presets/basic.nix +++ b/home/presets/basic.nix @@ -14,7 +14,6 @@ ../user/virtualization.nix ../user/vscode.nix ../user/yazi.nix - ../user/zellij.nix ../user/nvf ]; } diff --git a/home/user/nvf/plugins/snacks-nvim/keymaps.nix b/home/user/nvf/plugins/snacks-nvim/keymaps.nix index 4a3c918..257a752 100644 --- a/home/user/nvf/plugins/snacks-nvim/keymaps.nix +++ b/home/user/nvf/plugins/snacks-nvim/keymaps.nix @@ -2,7 +2,7 @@ let keyList = [ { key = ""; - action = "picker.smart()"; + action = "picker.files()"; desc = "Smart Find Files"; } { diff --git a/home/user/packages.nix b/home/user/packages.nix index 0ad98c2..3b184dc 100644 --- a/home/user/packages.nix +++ b/home/user/packages.nix @@ -8,6 +8,12 @@ }: let md2html = pkgs.callPackage ../scripts/md2html.nix { }; + ghosttyShaders = pkgs.fetchFromGitHub { + owner = "sahaj-b"; + repo = "ghostty-cursor-shaders"; + rev = "main"; + hash = "sha256-ruhEqXnWRCYdX5mRczpY3rj1DTdxyY3BoN9pdlDOKrE="; + }; in { programs.btop = { @@ -24,6 +30,11 @@ in enableFishIntegration = true; package = inputs.ghostty.packages.${system}.default; settings = { + custom-shader = [ + "${ghosttyShaders}/cursor_sweep.glsl" + "${ghosttyShaders}/ripple_cursor.glsl" + ]; + unfocused-split-opacity = 0.85; desktop-notifications = false; background-opacity = 0.4; @@ -38,7 +49,11 @@ in mouse-hide-while-typing = true; - keybind = [ "ctrl+shift+zero=toggle_tab_overview" ]; + keybind = [ + "ctrl+shift+zero=toggle_tab_overview" + "ctrl+shift+e=unbind" + "ctrl+shift+o=unbind" + ]; clipboard-read = "allow"; clipboard-write = "allow"; diff --git a/home/user/shellAlias.nix b/home/user/shellAlias.nix index 9e82787..1a7816c 100644 --- a/home/user/shellAlias.nix +++ b/home/user/shellAlias.nix @@ -5,7 +5,6 @@ cat = "bat"; g = "git"; t = "tmux"; - zl = "zellij"; # Nixos rebuild = "sudo nixos-rebuild switch --flake /etc/nixos#${hostname}"; diff --git a/home/user/zellij.nix b/home/user/zellij.nix index a426b5c..587d822 100644 --- a/home/user/zellij.nix +++ b/home/user/zellij.nix @@ -1,34 +1,91 @@ { pkgs, + lib, config, ... }: let inherit (builtins) fetchurl; inherit (config.lib.stylix) colors; + inherit (lib) getExe; zjstatus = fetchurl { url = "https://github.com/dj95/zjstatus/releases/download/v0.21.1/zjstatus.wasm"; sha256 = "sha256:06mfcijmsmvb2gdzsql6w8axpaxizdc190b93s3nczy212i846fw"; }; + + zellij-switch = fetchurl { + url = "https://github.com/mostafaqanbaryan/zellij-switch/releases/download/0.2.1/zellij-switch.wasm"; + sha256 = "sha256:1bi219dh9dfs1h7ifn4g5p8n6ini8ack1bfys5z36wzbzx0pw9gg"; + }; + + zellij-sessionizer-src = fetchurl { + url = "https://raw.githubusercontent.com/dachxy/zellij-sessionizer/refs/heads/main/zellij-sessionizer"; + sha256 = "sha256:01az9blb86mc3lxaxnrfcj23jaxhagsbs31qjn6pj5wm1wgb2mrf"; + }; + + zellij-sessionizer = pkgs.writeShellScriptBin "zellij-sessionizer" '' + export PATH="$PATH:${pkgs.fzf}/bin" + export ZELLIJ_SESSIONIZER_SEARCH_PATHS="$HOME/projects $HOME/notes $HOME/expr" + export ZELLIJ_SESSIONIZER_SPECIFIC_PATHS="/etc/nixos" + export ZELLIJ_SESSIONIZER_SWITCH_PLUGIN="file:${zellij-switch}" + + bash ${zellij-sessionizer-src} + ''; in { + home.packages = [ + zellij-sessionizer + ]; + + programs.fish.shellAliases = { + al = "zellij"; + aa = "zellij a --index 0"; + zs = "zellij-sessionizer"; + }; + programs.zellij = { enable = true; attachExistingSession = true; enableFishIntegration = true; enableBashIntegration = true; + + settings = { + pane_frames = false; + show_startup_tips = false; + session_serialization = false; + default_layout = "default"; + }; + extraConfig = '' keybinds clear-defaults=true { + shared { + bind "Ctrl /" { ToggleFloatingPanes; SwitchToMode "Normal"; } + } normal { bind "Ctrl n" { SwitchToMode "Resize"; } bind "Ctrl p" { SwitchToMode "Pane"; } + bind "Ctrl [" { SwitchToMode "Scroll"; } bind "Ctrl m" { SwitchToMode "Move"; } bind "Ctrl t" { SwitchToMode "Tab"; } + bind "Ctrl Space" { + LaunchOrFocusPlugin "session-manager" { + floating true + move_to_focused_tab true + }; + SwitchToMode "Normal" + } + bind "Ctrl f" { Run "${getExe zellij-sessionizer}" { + close_on_exit true + floating true + x "30%" + y "10%" + width "40%" + height "80%" + }; SwitchToMode "locked"; } bind "Alt Shift h" { GoToPreviousTab; } bind "Alt Shift l" { GoToNextTab; } - bind "Ctrl o" { SwitchToMode "Session"; } - bind "Ctrl /" { ToggleFloatingPanes; SwitchToMode "Normal"; } + bind "Ctrl Shift o" { SwitchToMode "Session"; } bind "Ctrl Shift -" { Run "yazi" { floating true close_on_exit true @@ -112,7 +169,7 @@ in bind "Tab" { ToggleTab; } } scroll { - bind "Ctrl s" { SwitchToMode "Normal"; } + bind "Ctrl [" { SwitchToMode "Normal"; } bind "e" { EditScrollback; SwitchToMode "Normal"; } bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; } bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; } @@ -133,7 +190,7 @@ in bind "d" { HalfPageScrollDown; } bind "u" { HalfPageScrollUp; } bind "n" { Search "down"; } - bind "p" { Search "up"; } + bind "shift n" { Search "up"; } bind "c" { SearchToggleOption "CaseSensitivity"; } bind "w" { SearchToggleOption "Wrap"; } bind "o" { SearchToggleOption "WholeWord"; } @@ -211,13 +268,8 @@ in font "monospace" } ''; - settings = { - pane_frames = false; - show_startup_tips = false; - default_layout = "compact-top-bar"; - }; layouts = { - compact-top-bar = { + default = { layout = { _children = [ { diff --git a/options/systemconf.nix b/options/systemconf.nix index afe7cf7..c3c7784 100644 --- a/options/systemconf.nix +++ b/options/systemconf.nix @@ -16,6 +16,8 @@ let optionals ; + inherit (helper) capitalize; + stateVersion = "25.05"; cfg = config.systemConf; @@ -44,7 +46,13 @@ let defaultSddmTheme = ( pkgs.sddm-astronaut.override { - embeddedTheme = "purple_leaves.conf"; + embeddedTheme = "purple_leaves"; + themeConfig = { + ScreenWidth = "1920"; + ScreenHeight = "1080"; + Font = "SF Pro Display Bold"; + HeaderText = "Welcome, ${capitalize cfg.username}"; + }; } ); in diff --git a/system/dev/dn-lap/default.nix b/system/dev/dn-lap/default.nix index 6fa9b2b..f2d5add 100644 --- a/system/dev/dn-lap/default.nix +++ b/system/dev/dn-lap/default.nix @@ -1,6 +1,5 @@ { hostname }: { - config, ... }: let diff --git a/system/dev/dn-pre7780/default.nix b/system/dev/dn-pre7780/default.nix index 11d3809..8bc3f11 100644 --- a/system/dev/dn-pre7780/default.nix +++ b/system/dev/dn-pre7780/default.nix @@ -1,11 +1,7 @@ { hostname }: { - self, - inputs, pkgs, - config, helper, - lib, ... }: let diff --git a/system/dev/dn-pre7780/home/default.nix b/system/dev/dn-pre7780/home/default.nix index 7edf8df..e5ca569 100644 --- a/system/dev/dn-pre7780/home/default.nix +++ b/system/dev/dn-pre7780/home/default.nix @@ -8,6 +8,7 @@ in home-manager.users."${username}" = { imports = [ ../../../../home/presets/basic.nix + ../../../../home/user/zellij.nix ./expr ./wm diff --git a/system/dev/dn-pre7780/home/expr/default.nix b/system/dev/dn-pre7780/home/expr/default.nix index fe0a2b4..1677e2f 100644 --- a/system/dev/dn-pre7780/home/expr/default.nix +++ b/system/dev/dn-pre7780/home/expr/default.nix @@ -2,6 +2,5 @@ { imports = [ ./helix.nix - ../../../../../home/user/zellij.nix ]; } diff --git a/system/dev/dn-pre7780/services/mail.nix b/system/dev/dn-pre7780/services/mail.nix index 9ed5358..ff5eeba 100644 --- a/system/dev/dn-pre7780/services/mail.nix +++ b/system/dev/dn-pre7780/services/mail.nix @@ -39,7 +39,7 @@ in base-dn = "ou=people,dc=net,dc=dn"; attributes = { name = "uid"; - email = "mail"; + email = "mailRoutingAddress"; secret = "userPassword"; description = [ "cn" @@ -48,8 +48,8 @@ in class = "objectClass"; }; filter = { - name = "(&(objectClass=inetOrgPerson)(|(uid=?)(mail=?)))"; - email = "(&(objectClass=inetOrgPerson)(mail=?))"; + name = "(&(objectClass=inetOrgPerson)(|(uid=?)(mail=?)(mailRoutingAddress=?)))"; + email = "(&(objectClass=inetOrgPerson)(mailRoutingAddress=?))"; }; bind = { dn = "cn=admin,dc=net,dc=dn"; diff --git a/system/dev/dn-server/default.nix b/system/dev/dn-server/default.nix index e796570..c27a4cc 100644 --- a/system/dev/dn-server/default.nix +++ b/system/dev/dn-server/default.nix @@ -1,10 +1,6 @@ { hostname }: { pkgs, - lib, - inputs, - system, - config, ... }: let @@ -40,6 +36,12 @@ in }; }; + services.journald.extraConfig = '' + SystemMaxUse=10G + SystemKeepFree=100M + MaxFileSec=1month + ''; + imports = [ ./common ./home diff --git a/system/dev/dn-server/network/services.nix b/system/dev/dn-server/network/services.nix index 7e0838d..ec7390f 100644 --- a/system/dev/dn-server/network/services.nix +++ b/system/dev/dn-server/network/services.nix @@ -392,11 +392,21 @@ in "10.0.0.0/24" "192.168.100.0/24" ]; + dns.port = 5300; yaml-settings = { webservice.webserver = true; }; }; + dnsdist = { + enable = true; + extraConfig = '' + newServer("127.0.0.1:${toString config.services.pdns-recursor.dns.port}") + addDOHLocal("0.0.0.0:8053", nil, nil, "/", { reusePort = true }) + getPool(""):setCache(newPacketCache(65535, {maxTTL=86400, minTTL=0, temporaryFailureTTL=60, staleTTL=60, dontAge=false})) + ''; + }; + powerdns-admin = { enable = true; secretKeyFile = config.sops.secrets."powerdns-admin/secret".path; @@ -457,13 +467,29 @@ in }; services.nginx.virtualHosts = { + "dns.${config.networking.domain}" = { + enableACME = true; + forceSSL = true; + locations."/dns-query" = { + extraConfig = '' + grpc_pass grpc://127.0.0.1:${toString 8053}; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Protocol $scheme; + proxy_set_header Range $http_range; + proxy_set_header If-Range $http_if_range; + ''; + }; + }; "powerdns.${config.networking.domain}" = { enableACME = true; forceSSL = true; locations."/api".proxyPass = "http://127.0.0.1:8081"; locations."/".proxyPass = "http://127.0.0.1:8000"; }; - "uptime.${config.networking.domain}" = { enableACME = true; forceSSL = true;