From 85feeb7b3f274457eb1a66832a45bff517d816bb Mon Sep 17 00:00:00 2001 From: danny Date: Sun, 14 Sep 2025 15:54:42 +0800 Subject: [PATCH] update: actual budget server --- README.md | 40 +- flake.lock | 6 +- flake.nix | 596 +++++++++---------- helper/default.nix | 13 +- home/scripts/memeSelector.nix | 112 ++-- home/user/nvf.nix | 57 +- home/user/waybar.nix | 13 +- system/dev/dn-pre7780/default.nix | 16 +- system/dev/dn-server/default.nix | 4 +- system/modules/actual.nix | 36 -- system/modules/actual/default.nix | 99 +++ system/modules/actual/missing-hashes_v1.json | 99 +++ system/modules/gitea.nix | 8 + system/modules/mail-server/server.nix | 11 - system/modules/packages.nix | 95 ++- 15 files changed, 709 insertions(+), 496 deletions(-) delete mode 100644 system/modules/actual.nix create mode 100644 system/modules/actual/default.nix create mode 100644 system/modules/actual/missing-hashes_v1.json create mode 100644 system/modules/gitea.nix diff --git a/README.md b/README.md index 5219ef7..8667eb2 100644 --- a/README.md +++ b/README.md @@ -8,25 +8,18 @@ ## ✨ Main Applications -- [X] Hyprland -- [X] Neovim - - ✅ [lazyvim](https://github.com/LazyVim/LazyVim) - - ✅ [treesitter](https://github.com/nvim-treesitter/nvim-treesitter) - - ❌ mason (not support on NixOS) -- [X] Waybar -- [X] Hyprlock -- [X] Hypridle -- [X] Swaync (Notification Center) -- [X] Swww (Wallpaper) -- [X] Ghostty (Terminal) -- [X] SDDM (Display Manager) -- [X] Fish (shell) -- [X] Rofi (Application Launcher) - -## 🎈 Theme - -- Catppuccin (Macchiato Lavender) -- plymouth (Boot Splash) +- [x] Hyprland +- [x] NVF +- [x] Waybar +- [x] Hyprlock +- [x] Hypridle +- [x] Swaync (Notification Center) +- [x] Swww (Wallpaper) +- [x] Ghostty (Terminal) +- [x] SDDM (Display Manager) +- [x] Fish (shell) +- [x] Rofi (Application Launcher) +- [x] Stylix ## 🎮️ Game @@ -38,15 +31,14 @@ - Virt Manager (libvirt) - Windows 11 example config: [win11_kvm.xml](./home/config/vm/win11_kvm.xml) -## ⌨️ Input (Fcitx5) +## ⌨️ Input (Fcitx5) - Rime (bopomofo, pinyin) - Mozc (Japanese) ## 🌐 VPN -- Wireguard (You need put your own `wg0.conf` file) -. +- Wireguard (You need put your own `wg0.conf` file) . > NOTE: If import `wireguard.nix` without config file, the Build will fail. @@ -62,7 +54,9 @@ See [Python Cuda Flake](https://github.com/DACHXY/python-cuda-flake) ## 💿️ Installation -> Your need to add your own device in [flake.nix](./flake.nix), and create configuration in [system/dev](./system/dev/) (don't forget the `hardware-configuration.nix` generated with `nixos-generate-config`) +> Your need to add your own device in [flake.nix](./flake.nix), and create +> configuration in [system/dev](./system/dev/) (don't forget the +> `hardware-configuration.nix` generated with `nixos-generate-config`) ### Example diff --git a/flake.lock b/flake.lock index 6305a7c..ed91edc 100644 --- a/flake.lock +++ b/flake.lock @@ -29,11 +29,11 @@ ] }, "locked": { - "lastModified": 1753936121, - "narHash": "sha256-gRZAewG5grwOchBqsZiOpJud3dMUColzvCoCkMRmJVo=", + "lastModified": 1757826057, + "narHash": "sha256-KE6kxoDme82jgmPUE67mvs/kjQBTfSxIuMufuEUSUSo=", "owner": "DACHXY", "repo": "actual-budget-api", - "rev": "368035ec590180f1229b1fccef33c16a2ba4df9a", + "rev": "1c7a816cbfe17c5821b446b5582e88404cb23596", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index bf99c40..e40cea7 100644 --- a/flake.nix +++ b/flake.nix @@ -119,306 +119,305 @@ }; }; - outputs = - { - self, - nixpkgs, - nix-index-database, - lanzaboote, - home-manager, - ... - }@inputs: - let - system = "x86_64-linux"; - nix-version = "25.05"; + outputs = { + self, + nixpkgs, + nix-index-database, + lanzaboote, + home-manager, + ... + } @ inputs: let + system = "x86_64-linux"; + nix-version = "25.05"; - pkgs = import nixpkgs { - inherit system; + pkgs = import nixpkgs { + inherit system; + }; + + inherit (pkgs) lib; + + helper = import ./helper {inherit pkgs lib;}; + + # Declare COMMON modules here + common-settings = { + modules = [ + home-manager.nixosModules.default + nix-index-database.nixosModules.nix-index + inputs.sops-nix.nixosModules.sops + inputs.chaotic.nixosModules.default + inputs.actual-budget-api.nixosModules.default + inputs.stylix.nixosModules.stylix + ]; + args = { + inherit + helper + inputs + system + nix-version + self + ; }; + }; - inherit (pkgs) lib; + # Declaring All Devices + devices = { + # Home Computer + dn-pre7780 = { + hostname = "dn-pre7780"; + domain = "net.dn"; + username = "danny"; + extra-modules = [ + lanzaboote.nixosModules.lanzaboote + ./system/dev/dn-pre7780 - helper = import ./helper { inherit pkgs lib; }; + # VM + inputs.microvm.nixosModules.host + { + networking.useNetworkd = true; + systemd.network.enable = true; + systemd.network.networks."10-lan" = { + matchConfig.Name = [ + "enp0s31f6" + "vm-*" + ]; + networkConfig = { + Bridge = "br0"; + }; + }; - # Declare COMMON modules here - common-settings = { - modules = [ - home-manager.nixosModules.default - nix-index-database.nixosModules.nix-index - inputs.sops-nix.nixosModules.sops - inputs.chaotic.nixosModules.default - inputs.actual-budget-api.nixosModules.default - inputs.stylix.nixosModules.stylix + systemd.network.netdevs."br0" = { + netdevConfig = { + Name = "br0"; + Kind = "bridge"; + }; + }; + + systemd.network.networks."10-lan-bridge" = { + matchConfig.Name = "br0"; + networkConfig = { + Address = ["192.168.0.5/24"]; + Gateway = "192.168.0.1"; + DNS = ["192.168.0.1"]; + }; + + linkConfig.RequiredForOnline = "routable"; + }; + + microvm.vms = { + vm-1 = { + flake = self; + updateFlake = "git+file:///etc/nixos"; + autostart = false; + }; + vm-2 = { + flake = self; + updateFlake = "git+file:///etc/nixos"; + autostart = false; + }; + }; + } ]; - args = { - inherit - helper - inputs - system - nix-version - self - ; - }; + overlays = []; }; - # Declaring All Devices - devices = { - # Home Computer - dn-pre7780 = { - hostname = "dn-pre7780"; - domain = "net.dn"; - username = "danny"; - extra-modules = [ - lanzaboote.nixosModules.lanzaboote - ./system/dev/dn-pre7780 - - # VM - inputs.microvm.nixosModules.host - { - networking.useNetworkd = true; - systemd.network.enable = true; - systemd.network.networks."10-lan" = { - matchConfig.Name = [ - "enp0s31f6" - "vm-*" - ]; - networkConfig = { - Bridge = "br0"; - }; - }; - - systemd.network.netdevs."br0" = { - netdevConfig = { - Name = "br0"; - Kind = "bridge"; - }; - }; - - systemd.network.networks."10-lan-bridge" = { - matchConfig.Name = "br0"; - networkConfig = { - Address = [ "192.168.0.5/24" ]; - Gateway = "192.168.0.1"; - DNS = [ "192.168.0.1" ]; - }; - - linkConfig.RequiredForOnline = "routable"; - }; - - microvm.vms = { - vm-1 = { - flake = self; - updateFlake = "git+file:///etc/nixos"; - autostart = false; - }; - vm-2 = { - flake = self; - updateFlake = "git+file:///etc/nixos"; - autostart = false; - }; - }; - } - ]; - overlays = [ ]; - }; - - # Laptop - dn-lap = { - hostname = "dn-lap"; - username = "danny"; - domain = "net.dn"; - extra-modules = [ - lanzaboote.nixosModules.lanzaboote - ./system/dev/dn-lap - ]; - overlays = [ - - ]; - }; - - # Server - dn-server = { - hostname = "dn-server"; - username = "danny"; - domain = "net.dn"; - extra-modules = [ - inputs.nix-minecraft.nixosModules.minecraft-servers - inputs.nix-tmodloader.nixosModules.tmodloader - ./system/dev/dn-server - ./pkgs/options/dovecot.nix - ]; - overlays = [ - inputs.nix-minecraft.overlay - inputs.nix-tmodloader.overlay - (import ./pkgs/overlays/dovecot.nix) - ]; - }; + # Laptop + dn-lap = { + hostname = "dn-lap"; + username = "danny"; + domain = "net.dn"; + extra-modules = [ + lanzaboote.nixosModules.lanzaboote + ./system/dev/dn-lap + ]; + overlays = [ + ]; }; - in - { - nixosConfigurations = - (builtins.mapAttrs ( - dev: conf: - let - domain = if conf.domain != null then conf.domain else "local"; + + # Server + dn-server = { + hostname = "dn-server"; + username = "danny"; + domain = "net.dn"; + extra-modules = [ + inputs.nix-minecraft.nixosModules.minecraft-servers + inputs.nix-tmodloader.nixosModules.tmodloader + ./system/dev/dn-server + ./pkgs/options/dovecot.nix + ]; + overlays = [ + inputs.nix-minecraft.overlay + inputs.nix-tmodloader.overlay + (import ./pkgs/overlays/dovecot.nix) + ]; + }; + }; + in { + nixosConfigurations = + (builtins.mapAttrs ( + dev: conf: let + domain = + if conf.domain != null + then conf.domain + else "local"; inherit (conf) username hostname; in - nixpkgs.lib.nixosSystem { - modules = [ - { - system.stateVersion = nix-version; - home-manager = { - backupFileExtension = "backup-hm"; - useUserPackages = true; - useGlobalPkgs = true; - extraSpecialArgs = { - inherit - helper - inputs - system - nix-version - devices - username - ; - }; - users."${username}" = lib.mkIf (!((conf ? isVM) && (conf.isVM))) { - imports = [ - inputs.hyprland.homeManagerModules.default - inputs.caelestia-shell.homeManagerModules.default - inputs.zen-browser.homeManagerModules.${system}.default - inputs.nvf.homeManagerModules.default - { - home = { - homeDirectory = "/home/${username}"; - stateVersion = nix-version; - }; - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; - } - ]; - }; - }; - networking = { - inherit domain; - hostName = hostname; - }; - nixpkgs.hostPlatform = system; - nixpkgs.config.allowUnfree = true; - nixpkgs.overlays = ((import ./pkgs/overlays) ++ conf.overlays); - } - ] - ++ common-settings.modules - ++ conf.extra-modules; - specialArgs = { - inherit username; - } - // common-settings.args; - } - ) devices) - // - # VM For k8s - ( - let - vmList = - let - kubeMasterIP = "192.168.0.6"; - kubeMasterHostname = "api.kube"; - kubeMasterAPIServerPort = 6443; - kubeApi = "https://${kubeMasterHostname}:${toString kubeMasterAPIServerPort}"; - in - { - # master - vm-1 = { - ip = "192.168.0.6"; - mac = "02:00:00:00:00:01"; - extraConfig = { - networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; - environment.systemPackages = with pkgs; [ - kompose - kubectl - kubernetes - ]; - - services.kubernetes = { - roles = [ - "master" - "node" + nixpkgs.lib.nixosSystem { + modules = + [ + { + system.stateVersion = nix-version; + home-manager = { + backupFileExtension = "backup-hm"; + useUserPackages = true; + useGlobalPkgs = true; + extraSpecialArgs = { + inherit + helper + inputs + system + nix-version + devices + username + ; + }; + users."${username}" = lib.mkIf (!((conf ? isVM) && (conf.isVM))) { + imports = [ + inputs.hyprland.homeManagerModules.default + inputs.caelestia-shell.homeManagerModules.default + inputs.zen-browser.homeManagerModules.${system}.default + inputs.nvf.homeManagerModules.default + { + home = { + homeDirectory = "/home/${username}"; + stateVersion = nix-version; + }; + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + } ]; - - masterAddress = kubeMasterHostname; - apiserverAddress = kubeApi; - easyCerts = true; - apiserver = { - securePort = kubeMasterAPIServerPort; - advertiseAddress = kubeMasterIP; - }; - - addons.dns.enable = true; - }; - - systemd.services.link-kube-config = { - wantedBy = [ "multi-user.target" ]; - serviceConfig = { - Type = "oneshot"; - ExecStart = "${pkgs.writeShellScript "link-kube-config.sh" '' - target="/etc/kubernetes/cluster-admin.kubeconfig" - if [ -e "$target" ]; then - [ ! -d "/root/.kube" ] && mkdir -p "/root/.kube" - ln -sf $target /root/.kube/config - fi - ''}"; - }; }; }; - }; - # Node - vm-2 = { - ip = "192.168.0.7"; - mac = "02:00:00:00:00:02"; - extraConfig = { - networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; - - environment.systemPackages = with pkgs; [ - kompose - kubectl - kubernetes - ]; - - services.kubernetes = { - roles = [ "node" ]; - masterAddress = kubeMasterHostname; - easyCerts = true; - - kubelet.kubeconfig.server = kubeApi; - apiserverAddress = kubeApi; - addons.dns.enable = true; - }; + networking = { + inherit domain; + hostName = hostname; }; + nixpkgs.hostPlatform = system; + nixpkgs.config.allowUnfree = true; + nixpkgs.overlays = (import ./pkgs/overlays) ++ conf.overlays; + } + ] + ++ common-settings.modules + ++ conf.extra-modules; + specialArgs = + { + inherit username; + } + // common-settings.args; + } + ) + devices) + // + # VM For k8s + ( + let + vmList = let + kubeMasterIP = "192.168.0.6"; + kubeMasterHostname = "api.kube"; + kubeMasterAPIServerPort = 6443; + kubeApi = "https://${kubeMasterHostname}:${toString kubeMasterAPIServerPort}"; + in { + # master + vm-1 = { + ip = "192.168.0.6"; + mac = "02:00:00:00:00:01"; + extraConfig = { + networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; + environment.systemPackages = with pkgs; [ + kompose + kubectl + kubernetes + ]; + + services.kubernetes = { + roles = [ + "master" + "node" + ]; + + masterAddress = kubeMasterHostname; + apiserverAddress = kubeApi; + easyCerts = true; + apiserver = { + securePort = kubeMasterAPIServerPort; + advertiseAddress = kubeMasterIP; }; + + addons.dns.enable = true; }; - mkMicrovm = name: value: { - hypervisor = "qemu"; - vcpu = 4; - mem = 8192; - interfaces = [ - { - type = "tap"; - id = "${name}"; - mac = value.mac; - } - ]; - shares = [ - { - tag = "ro-store"; - source = "/nix/store"; - mountPoint = "/nix/.ro-store"; - } - ]; + systemd.services.link-kube-config = { + wantedBy = ["multi-user.target"]; + serviceConfig = { + Type = "oneshot"; + ExecStart = "${pkgs.writeShellScript "link-kube-config.sh" '' + target="/etc/kubernetes/cluster-admin.kubeconfig" + if [ -e "$target" ]; then + [ ! -d "/root/.kube" ] && mkdir -p "/root/.kube" + ln -sf $target /root/.kube/config + fi + ''}"; + }; + }; }; - in - lib.mapAttrs' ( - name: value: + }; + # Node + vm-2 = { + ip = "192.168.0.7"; + mac = "02:00:00:00:00:02"; + extraConfig = { + networking.extraHosts = "${kubeMasterIP} ${kubeMasterHostname}"; + + environment.systemPackages = with pkgs; [ + kompose + kubectl + kubernetes + ]; + + services.kubernetes = { + roles = ["node"]; + masterAddress = kubeMasterHostname; + easyCerts = true; + + kubelet.kubeconfig.server = kubeApi; + apiserverAddress = kubeApi; + addons.dns.enable = true; + }; + }; + }; + }; + + mkMicrovm = name: value: { + hypervisor = "qemu"; + vcpu = 4; + mem = 8192; + interfaces = [ + { + type = "tap"; + id = "${name}"; + mac = value.mac; + } + ]; + shares = [ + { + tag = "ro-store"; + source = "/nix/store"; + mountPoint = "/nix/.ro-store"; + } + ]; + }; + in + lib.mapAttrs' ( + name: value: lib.nameValuePair name ( nixpkgs.lib.nixosSystem { inherit system; @@ -449,15 +448,15 @@ systemd.network.networks."20-lan" = { matchConfig.Type = "ether"; networkConfig = { - Address = [ "${value.ip}/24" ]; + Address = ["${value.ip}/24"]; Gateway = "192.168.0.1"; - DNS = [ "192.168.0.1" ]; + DNS = ["192.168.0.1"]; DHCP = "no"; }; }; systemd.services.br-netfilter = { - wantedBy = [ "multi-user.target" ]; + wantedBy = ["multi-user.target"]; serviceConfig = { ExecStart = "/run/current-system/sw/bin/modprobe br_netfilter"; }; @@ -480,22 +479,23 @@ ]; } ) - ) vmList ) - // { - vps = nixpkgs.lib.nixosSystem { - inherit system; - specialArgs = common-settings.args; - modules = [ - inputs.disko.nixosModules.disko - ./system/dev/generic - ]; - }; + vmList + ) + // { + vps = nixpkgs.lib.nixosSystem { + inherit system; + specialArgs = common-settings.args; + modules = [ + inputs.disko.nixosModules.disko + ./system/dev/generic + ]; }; - - packages."${system}" = { - vm-1 = self.nixosConfigurations.vm-1.config.microvm.declaredRunner; - vm-2 = self.nixosConfigurations.vm-2.config.microvm.declaredRunner; }; + + packages."${system}" = { + vm-1 = self.nixosConfigurations.vm-1.config.microvm.declaredRunner; + vm-2 = self.nixosConfigurations.vm-2.config.microvm.declaredRunner; }; + }; } diff --git a/helper/default.nix b/helper/default.nix index cb06edf..566bf8c 100644 --- a/helper/default.nix +++ b/helper/default.nix @@ -4,8 +4,8 @@ }: let inherit (pkgs) writeShellScript; - inherit (lib) replaceString; - inherit (builtins) toJSON mapAttrs; + inherit (lib) replaceString optionalString; + inherit (builtins) toJSON; in { mkToggleScript = @@ -14,6 +14,7 @@ in start, stop, icon ? "", + notify-icon ? "", extra ? { }, }: let @@ -26,10 +27,14 @@ in case $1 in toggle) if systemctl --user is-active --quiet "$SERVICE_NAME"; then systemctl --user stop "$SERVICE_NAME" - notify-send "${icon} ''\${SERVICE_NAME^}" "stopping" + notify-send ${ + optionalString (notify-icon != "") "-i ${notify-icon}" + } "${icon} ''\${SERVICE_NAME^}" "stopping" else systemctl --user start "$SERVICE_NAME" - notify-send "${icon} ''\${SERVICE_NAME^}" "starting" + notify-send ${ + optionalString (notify-icon != "") "-i ${notify-icon}" + }"${icon} ''\${SERVICE_NAME^}" "starting" fi esac diff --git a/home/scripts/memeSelector.nix b/home/scripts/memeSelector.nix index f409548..7b90a36 100644 --- a/home/scripts/memeSelector.nix +++ b/home/scripts/memeSelector.nix @@ -1,66 +1,70 @@ -{ pkgs, ... }: -pkgs.writers.writePython3Bin "memeSelector" { libraries = with pkgs.python3Packages; [ requests ]; } - '' - import requests - import xml.etree.ElementTree as ET - import urllib.parse - import sys - import os - import tempfile - import subprocess +{ + pkgs, + url, + ... +}: +pkgs.writers.writePython3Bin "memeSelector" {libraries = with pkgs.python3Packages; [requests];} +'' + import requests + import xml.etree.ElementTree as ET + import urllib.parse + import sys + import os + import tempfile + import subprocess - BASE_URL = "https://nextcloud.net.dn/public.php/dav/files/pygHoPB5LxDZbeY/" - headers = {"Depth": "1"} - resp = requests.request( - "PROPFIND", - BASE_URL, - headers=headers, - verify="${"" + ../../system/extra/ca.crt}" - ) + BASE_URL = "${url}" + headers = {"Depth": "1"} + resp = requests.request( + "PROPFIND", + BASE_URL, + headers=headers, + verify="${"" + ../../system/extra/ca.crt}" + ) - if resp.status_code not in (200, 207): - print(f"Error: Http {resp.status_code}") - sys.exit(1) + if resp.status_code not in (200, 207): + print(f"Error: Http {resp.status_code}") + sys.exit(1) - root = ET.fromstring(resp.text) - ns = {"d": "DAV:"} + root = ET.fromstring(resp.text) + ns = {"d": "DAV:"} - files = [] - for href in root.findall(".//d:href", ns): - path = href.text - if not path: - continue - filename = urllib.parse.unquote(path.split("/")[-1]) + files = [] + for href in root.findall(".//d:href", ns): + path = href.text + if not path: + continue + filename = urllib.parse.unquote(path.split("/")[-1]) - if filename and not filename.endswith("/"): - files.append(filename) + if filename and not filename.endswith("/"): + files.append(filename) - if not files: - print("No files found") - sys.exit(0) + if not files: + print("No files found") + sys.exit(0) - rofi = subprocess.run( - ["rofi", "-dmenu", "-p", "Meme"], - input="\n".join(files).encode(), - stdout=subprocess.PIPE - ) + rofi = subprocess.run( + ["rofi", "-i", "-dmenu", "-p", "Meme"], + input="\n".join(files).encode(), + stdout=subprocess.PIPE + ) - selected = rofi.stdout.decode().strip() - if not selected: - sys.exit(0) + selected = rofi.stdout.decode().strip() + if not selected: + sys.exit(0) - url = BASE_URL + urllib.parse.quote(selected) - tmpfile = os.path.join(tempfile.gettempdir(), selected) + url = BASE_URL + urllib.parse.quote(selected) + tmpfile = os.path.join(tempfile.gettempdir(), selected) - subprocess.run(["wget", "-q", "-O", tmpfile, url], check=True) + subprocess.run(["wget", "-q", "-O", tmpfile, url], check=True) - with open(tmpfile, "rb") as f: - subprocess.run("wl-copy", stdin=f) + with open(tmpfile, "rb") as f: + subprocess.run("wl-copy", stdin=f) - subprocess.run([ - "notify-send", - "-i", tmpfile, - "Meme Copied: ", - f"{selected}" - ]) - '' + subprocess.run([ + "notify-send", + "-i", tmpfile, + "Meme Copied: ", + f"{selected}" + ]) +'' diff --git a/home/user/nvf.nix b/home/user/nvf.nix index 163c5ec..4278a2e 100644 --- a/home/user/nvf.nix +++ b/home/user/nvf.nix @@ -1,6 +1,7 @@ { pkgs, lib, + osConfig, ... }: let inherit (lib.generators) mkLuaInline; @@ -232,25 +233,37 @@ in { } { key = ""; - mode = ["n" "t"]; + mode = [ + "n" + "t" + ]; action = "j"; nowait = true; } { key = ""; - mode = ["n" "t"]; + mode = [ + "n" + "t" + ]; action = "k"; nowait = true; } { key = ""; - mode = ["n" "t"]; + mode = [ + "n" + "t" + ]; action = "l"; nowait = true; } { key = ""; - mode = ["n" "t"]; + mode = [ + "n" + "t" + ]; action = "h"; nowait = true; } @@ -414,14 +427,28 @@ in { }; nix = { enable = true; + format.type = "nixfmt"; lsp = { - enable = true; server = "nixd"; + options = { + nixos.expr = + # nix + ''(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${osConfig.networking.hostName}.options''; + home_manager.expr = + # nix + ''(builtins.getFlake (builtins.toString ./.)).nixosConfigurations.${osConfig.networking.hostName}.options.home-manager.users.type.getSubOptions []''; + }; }; }; sql.enable = true; clang.enable = true; - ts.enable = true; + ts = { + enable = true; + format.type = "prettierd"; + extensions = { + ts-error-translator.enable = true; + }; + }; python.enable = true; markdown.enable = true; html.enable = true; @@ -627,7 +654,15 @@ in { autopairs.nvim-autopairs.enable = true; autocomplete = { - blink-cmp.enable = true; + blink-cmp = { + enable = true; + setupOpts = { + completion = { + menu.border = "rounded"; + documentation.window.border = "rounded"; + }; + }; + }; }; snippets.luasnip = { @@ -705,6 +740,10 @@ in { multicursors.enable = true; undotree.enable = true; + yazi-nvim = { + enable = true; + }; + images = { img-clip.enable = true; }; @@ -753,7 +792,9 @@ in { event = "msg_show"; kind = "bufwrite"; }; - opts = {skip = true;}; + opts = { + skip = true; + }; } { filter = { diff --git a/home/user/waybar.nix b/home/user/waybar.nix index 444ca68..c24a313 100644 --- a/home/user/waybar.nix +++ b/home/user/waybar.nix @@ -15,13 +15,14 @@ let inherit (lib) optionalString; gamemodeToggle = mkToggleScript { - service = "gamemoded"; + service = "gamemodedr"; start = "on"; stop = "off"; icon = ""; + notify-icon = "preferences-desktop-gaming"; extra = { text = "$(pgrep -c gamemode)"; - tooltip = "Running: $(pgrep -c gamemode)"; + tooltip = "Running: $(systemctl --user is-active gamemodedr)"; }; }; @@ -87,6 +88,14 @@ in "d /tmp/wall_cache 700 ${username} -" ]; + # === gamemoded -r === # + systemd.user.services.gamemodedr = lib.mkIf osConfig.programs.gamemode.enable { + Service = { + Type = "simple"; + ExecStart = "${pkgs.gamemode}/bin/gamemoded -r"; + }; + }; + # === waybar === # systemd.user.services.waybar = lib.mkIf config.programs.waybar.enable { Unit = { diff --git a/system/dev/dn-pre7780/default.nix b/system/dev/dn-pre7780/default.nix index fe0e989..80de0f2 100644 --- a/system/dev/dn-pre7780/default.nix +++ b/system/dev/dn-pre7780/default.nix @@ -7,11 +7,14 @@ }: let inherit (lib) optionalString; + geVersion = "10-15"; monitors = [ "desc:ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271" "desc:Acer Technologies XV272U V3 1322131231233" ]; - memeSelector = pkgs.callPackage ../../../home/scripts/memeSelector.nix { }; + memeSelector = pkgs.callPackage ../../../home/scripts/memeSelector.nix { + url = "https://nextcloud.net.dn/public.php/dav/files/pygHoPB5LxDZbeY/"; + }; in { networking.firewall.allowedTCPPortRanges = [ @@ -19,6 +22,10 @@ in from = 8000; to = 8100; } + { + from = 31000; + to = 31010; + } ]; hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.latest; @@ -197,11 +204,12 @@ in echo "AUTOEXEC LOADED SUCCESSFULLY!" host_writeconfig ''; + # Proton GE - ".steam/root/compatibilitytools.d/GE-Proton10-10" = { + ".steam/root/compatibilitytools.d/GE-Proton${geVersion}" = { source = fetchTarball { - url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton10-10/GE-Proton10-10.tar.gz"; - sha256 = "sha256:1vkj66x84yqmpqm857hjzmx1s02h2lffcbc60jdfqz9xj34dx5jc"; + url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton${geVersion}/GE-Proton${geVersion}.tar.gz"; + sha256 = "sha256:0iv7vak4a42b5m772gqr6wnarswib6dmybfcdjn3snvwxcb6hbsm"; }; }; ".steam/root/compatibilitytools.d/CachyOS-Proton10-0_v3" = { diff --git a/system/dev/dn-server/default.nix b/system/dev/dn-server/default.nix index 1ff4cc4..eb2e6a5 100644 --- a/system/dev/dn-server/default.nix +++ b/system/dev/dn-server/default.nix @@ -49,7 +49,7 @@ in }) ]; }) - (import ../../modules/actual.nix { + (import ../../modules/actual { fqdn = "actual.net.dn"; }) (import ../../modules/nextcloud.nix { @@ -127,7 +127,7 @@ in ../../../home/user/config.nix ../../../home/user/direnv.nix ../../../home/user/environment.nix - ../../../home/user/nvim.nix + ../../../home/user/nvf.nix ../../../home/user/shell.nix ../../../home/user/tmux.nix ../../../home/user/yazi.nix diff --git a/system/modules/actual.nix b/system/modules/actual.nix deleted file mode 100644 index 5e314cb..0000000 --- a/system/modules/actual.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - fqdn ? null, -}: -{ config, ... }: -let - inherit (builtins) toString; - finalFqdn = if fqdn != null then fqdn else config.networking.fqdn; -in -{ - services.actual = { - enable = true; - settings = { - port = 31000; - hostname = "127.0.0.1"; - serverFiles = "/var/lib/actual/server-files"; - userFiles = "/var/lib/actual/user-files"; - loginMethod = "openid"; - }; - }; - - services.actual-budget-api = { - enable = true; - listenPort = 31001; - listenHost = "127.0.0.1"; - serverURL = "https://${finalFqdn}"; - }; - - services.nginx.virtualHosts."${finalFqdn}" = { - enableACME = true; - forceSSL = true; - - locations."/api/".proxyPass = - "http://localhost:${toString config.services.actual-budget-api.listenPort}/"; - locations."/".proxyPass = "http://localhost:${toString config.services.actual.settings.port}"; - }; -} diff --git a/system/modules/actual/default.nix b/system/modules/actual/default.nix new file mode 100644 index 0000000..157a242 --- /dev/null +++ b/system/modules/actual/default.nix @@ -0,0 +1,99 @@ +{ + fqdn ? null, + proxy ? true, +}: { + config, + pkgs, + lib, + ... +}: let + inherit (builtins) toString; + inherit (lib) mkIf; + finalFqdn = + if fqdn != null + then fqdn + else config.networking.fqdn; + + version = "25.9.0"; + + src = pkgs.fetchFromGitHub { + name = "actualbudget-actual-source"; + owner = "actualbudget"; + repo = "actual"; + tag = "v${version}"; + hash = "sha256-TYvGavj0Ts1ahgseFhuOtmfOSgPkjBIr19SIGOgx++Q="; + }; + + translations = pkgs.fetchFromGitHub { + name = "actualbudget-translations-source"; + owner = "actualbudget"; + repo = "translations"; + rev = "eba2cb7a8e339cda2efa4e834f15b7c81d145966"; + hash = "sha256-YVjG2fwyIa1nVyZvRvujRQYHN/P9SaIB2nWiJm5m87Y="; + }; + + missingHashes = ./missing-hashes_v1.json; + + actualServer = pkgs.actual-server.overrideAttrs (_: { + inherit version src; + srcs = [ + src + translations + ]; + + srouceRoot = "${src.name}/"; + + offlineCache = pkgs.yarn-berry.fetchYarnBerryDeps { + inherit src missingHashes; + hash = "sha256-Vod0VfoZG2nwnu35XLAPqY5uuRLVD751D3ZysD0ypL0="; + }; + + postPatch = '' + ln -sv ../../../${translations.name} ./packages/desktop-client/locale + + patchShebangs --build ./bin ./packages/*/bin + + # Patch all references to `git` to a no-op `true`. This neuter automatic + # translation update. + substituteInPlace bin/package-browser \ + --replace-fail "git" "true" + + # Allow `remove-untranslated-languages` to do its job. + chmod -R u+w ./packages/desktop-client/locale + + # Disable the postinstall script for `protoc-gen-js` because it tries to + # use network in buildPhase. It's just used as a dev tool and the generated + # protobuf code is committed in the repository. + cat <<< $(${lib.getExe pkgs.jq} '.dependenciesMeta."protoc-gen-js".built = false' ./package.json) > ./package.json + ''; + }); +in { + services = { + actual = { + enable = true; + package = actualServer; + settings = { + port = 31000; + hostname = "127.0.0.1"; + serverFiles = "/var/lib/actual/server-files"; + userFiles = "/var/lib/actual/user-files"; + loginMethod = "openid"; + }; + }; + + actual-budget-api = { + enable = true; + listenPort = 31001; + listenHost = "127.0.0.1"; + serverURL = "https://${finalFqdn}"; + }; + }; + + services.nginx.virtualHosts."${finalFqdn}" = mkIf proxy { + enableACME = true; + forceSSL = true; + + locations."/api/".proxyPass = "http://localhost:${toString config.services.actual-budget-api.listenPort}/"; + locations."/".proxyPass = "http://localhost:${toString config.services.actual.settings.port}"; + }; +} diff --git a/system/modules/actual/missing-hashes_v1.json b/system/modules/actual/missing-hashes_v1.json new file mode 100644 index 0000000..acb793b --- /dev/null +++ b/system/modules/actual/missing-hashes_v1.json @@ -0,0 +1,99 @@ +{ + "@esbuild/aix-ppc64@npm:0.25.1": "b7b13c0ba1ad3251586c094b8a62620f3d47ff5b7037ece162a6be0b6219ef7e7af54dd723172f997188433ab767f375ad213cad3d515ea41ab09390d84e726c", + "@esbuild/android-arm64@npm:0.25.1": "88003e0f79cf75f4d034b3bdf2c0e9e44ad90aa10b6b75b7241e468fb751f5de5610afd4ed9fdc2febf1ddbad16b20bd376cd5aaef694f46a62763ba164e5ea3", + "@esbuild/android-arm@npm:0.25.1": "ef86951b4b247fc530180607da8d67671586f02859cd8b6ba922658c34c48135a1729df352308051efb4fd7856e01f60a90f921f4159a56fe9ae9d422ed948fc", + "@esbuild/android-x64@npm:0.25.1": "eb6e9285ea5e629983b065d6cc2bfe882337861fd4491cf497291cb9628b95d498e86bd0ea440e2e3aa9cd0bcb913cdfce6bd75c947b6d0e22bc0ae549ca6d89", + "@esbuild/darwin-arm64@npm:0.25.1": "34c125754c2103eb497937df842eadf32acd2bc074de0918db43f51913688651003457e8d837cb2aea371db47aefa162a73bcbed7529efb3fce41e162236ea9c", + "@esbuild/darwin-x64@npm:0.25.1": "0920b1622909f001028fa9c8978edd53ee3ec3cb6321a50f0b20ce67d5d82ed55a4acdb459800a4fe374bd70b953b51366026756d169a26982bbc3f1a7131f16", + "@esbuild/freebsd-arm64@npm:0.25.1": "5f30c81b55eb9586778e4f832616b2f66d8aaade864ac46e605d33c2b7daa83ef04485830e96cd138375b5b79bd9b765386c3d8abe7d88c2bbecc0ca19a628a7", + "@esbuild/freebsd-x64@npm:0.25.1": "9b5086c0ba8a1c8bd19eeb4536f3efdee186dfbc954821e5d8e041d38e4698c2eed46ac95d72018a9914b994f1de12be9f5dbe054994a0a72e4f0dabf9f1a6f7", + "@esbuild/linux-arm64@npm:0.25.1": "202515560459ecb05044e0ae6079c0fbecbe863f35dfa5d2adc2f9e830a543ed6412aa277a79fd1e94d33c499ca5b5984bdc25124268950d8f95375f76999810", + "@esbuild/linux-arm@npm:0.25.1": "c6fe6372e4870ad2d232c4bfe926c41be76cbd67143df8377320ae38971bc1cea50f342f88a31e54a43c4ca0a84e2c3a1accf780ba630b356b87eb51dc5ee5a2", + "@esbuild/linux-ia32@npm:0.25.1": "2719e82d4d6718ad034856e1588e9946e7390d8c4e2dbe61cfb6feec15464a999ebee477fa5189fef31517b27816b312fb68f0a496c6e8895989db2c0cbcd96b", + "@esbuild/linux-loong64@npm:0.25.1": "ae79c5760e03418100376dbbd89ba21b85b31b5959035ac127c927c09acc097e3f24747e56496ce63f5b4a94a2d5e0aa538ad74060c2a21f4b5d6dfc69bbd7ae", + "@esbuild/linux-mips64el@npm:0.25.1": "00bfc596edb4e20d0c267f6c8874a0e99960ecc24a8f1755ddfa31f472a35dd58de835982e0721a7641ce494b6947cfd271cf933580674c6e4451a371d0723ba", + "@esbuild/linux-ppc64@npm:0.25.1": "cfab66cdb8ad5fe15ea74ce19b945ef7a9291f252f7f063095e0d718d3be36abcc85f9cac26463865dfa03970c28e7e4e6a93fc75adb405cea492ca6f22ead4e", + "@esbuild/linux-riscv64@npm:0.25.1": "ef46ca2ef7ae0f3f96a795317297ceac2a08d4a4052a133d30722666de8bbae20029ad1ef79c63adce5f66b7afc017bd4611c71ae22d8db34b60170c2b45c637", + "@esbuild/linux-s390x@npm:0.25.1": "cd9a4641369c3df48da83895a2dfa66e02170ecee190fa817f03b659732f6b20dceb02dc281cfdfb145a4407e3aea98eb2c0587ff6d161d16de8d7a502112a5c", + "@esbuild/linux-x64@npm:0.25.1": "c73b51929e1dc770b8eb25c93551c6f6808858623647266b49a9aacbbf0b68ecffa6cb54bebd5b8c14c498a42a7631081033de6be4a35ff049dfda37e52fda3f", + "@esbuild/netbsd-arm64@npm:0.25.1": "a094af97cb886c65034445492d0679588e66daf0317c3567da2b529816154a581944e18888d2515cf543be4c4b7a1509ebcc7871d01c2ac66b9f53f56af5ea8d", + "@esbuild/netbsd-x64@npm:0.25.1": "7461fd218fc88ae4b6534573bc84af995be0faa5b5dbd8be2635c12bb0d74c7c860487fbc07fd0487d4231fc3272f02f5db180d6c79e632f6e8f33138b626462", + "@esbuild/openbsd-arm64@npm:0.25.1": "014da561c510c2f80a2917560a0d24af8a951cbb60fc54fb8b03361ce1fb2e9c8baa361e970509db4f4690fb039a564fa5393c781042ba94a76681871e787f75", + "@esbuild/openbsd-x64@npm:0.25.1": "bc500e5610f6584c2c8412e9b9f2df827b83a91f0d3c04a91b6d031a2c7f0ee45b37984b4a7d2299c54e6188e6dab551f71bb38331e7fbb91009a8bc9852ff57", + "@esbuild/sunos-x64@npm:0.25.1": "d915f595373916b96c6f531a45bfb04297ce199d4c8d86e1c980e6508af157b25e5e6d19a7b4bc05a657d08bdfbac099457bccd624c6da574e8f5dbbff9f0ce6", + "@esbuild/win32-arm64@npm:0.25.1": "be20428d1e4bdd2a3e77e30127f8fb24fe073f7317b9aa3474d8a59a6e832bb93c323128a8f10841ba2d3838d7d8f8bb2bebf90ef196087f766d5a32f81c642d", + "@esbuild/win32-ia32@npm:0.25.1": "7f3fa011cc38ba05c31d07e89eb19aa1587720d8dc44df727e5d14b02d5b2a238297e88597cbcbba4fa2b8c9d4f2f96124020114b4981e533fedd8a8e2fe27bb", + "@esbuild/win32-x64@npm:0.25.1": "51a470813dd92d7ca58bfd30a2d94d7ce7a363f750df8164f359ffe28caa270d36ffae3aa8407eddfa5b214d173ada1a121ccf19c5d21fc36092634b9e5fea17", + "@parcel/watcher-android-arm64@npm:2.5.1": "e9c94ede3bd5c5d999d117d22ac8032a17f8ebc72db3eff04ccb2b4e6718db19f24bf29a66a610e03f4ee95e2cd7b2d30c15b1845eb897b971fec75dbdd76141", + "@parcel/watcher-darwin-arm64@npm:2.5.1": "0cab55a55c128ac5742388fc8dbfeb9877018509943801ce8a52b57bb6dca24189d025d38684b1e482cb7816368a52c6434dfe45d3997e2fd2509276f48774ea", + "@parcel/watcher-darwin-x64@npm:2.5.1": "bf07b8ca9a435fb885fb0ca6565204d2f2098d7f632faf26a6478bb39f538c73b50afca17c193dc189a80a864d85e40f924ec7f21a0e7ad7d0de6f97f7154134", + "@parcel/watcher-freebsd-x64@npm:2.5.1": "9f62b9da08e98bffb7cf91b557af209586e1d7dd654c56c5a58fc4b0bb61a9bb318116ed0048416d3341d3434b1fb3089bf6cfbfcd08e61333917bc59e691c1d", + "@parcel/watcher-linux-arm-glibc@npm:2.5.1": "07a55a0050e913c9781d009a05b3a0a49c77c2679ae9f98b2374a7e17c5401e2076a776c7bec88de58c71fef040c89aa97176dfa28a03abf8754e18e8d1109b4", + "@parcel/watcher-linux-arm-musl@npm:2.5.1": "f9cab0efa652276fb4bcb58845c9606f7aead1ec81f7c4ce2d237eec754bbd3101682c735b6a371dccf93f16fcfe0ea1beef5d43eb39e4505df7f29b73ea0004", + "@parcel/watcher-linux-arm64-glibc@npm:2.5.1": "ce22f303187aa03fa9d1f9609d2cd56cce6b62f0a60f14a65449adc25b7072d06118d956eb7ebb548210cf2d120cf5e987abe34e6515a5bfbd35b15643f40142", + "@parcel/watcher-linux-arm64-musl@npm:2.5.1": "7a0b32b7b784fe3e594452b6642adc3bb4ad78eae526f5e4c7cf061f428eef2e05e827334806cd230bc873903abb1f70886716a0353e653b3b784f09d2237956", + "@parcel/watcher-linux-x64-glibc@npm:2.5.1": "a6241bb57c409ab56ef944e8d64e057817f41a9335047d1e252aab4e4b10f64d8bc2620ae5c761b71551f3c4b494edd687a08c274a46ca2eb84ad34f6f4de9c0", + "@parcel/watcher-linux-x64-musl@npm:2.5.1": "a68cfcd10a50906ab228d7b906eced68faf6a42a29da5506d24d0dd91b9593a61605b91749d9b1e3ed9f257b845f48ba3df62572e40b4ff1f724d879865b225a", + "@parcel/watcher-win32-arm64@npm:2.5.1": "0f467a731cf9403b8bc7d35418d991596cf5e7898029796b4c769bcbb38cd07ae6ec05ef0f19298e5f11e73ec5198bc474d79b056bdfbaea513525725103d7dd", + "@parcel/watcher-win32-ia32@npm:2.5.1": "9ab5f3e9849a6077c8c2aba7bdf9030dea38f0ab9180792ecd30094520cddf16f3b68006f666845b86c5ef0e05c648364475c9ba151e0269561891ca3e276667", + "@parcel/watcher-win32-x64@npm:2.5.1": "e588d87d5b892484d252ac8e1ec3f4bf7a664d91f0d03dd93764be8db2c35f81879275908dcbec42b0e43bc99c7afdfd29fe687ec022bb2c8c4bc7edd29eaa15", + "@rollup/rollup-android-arm-eabi@npm:4.40.1": "24131de0516010cd1c52d399fb17dbbe93b3ed6a981b57d82f363b9102a04083d470d0d7ead324fcc16e0eee7d54b7300ed3ce72bf43a4d277b959eb79f7490c", + "@rollup/rollup-android-arm64@npm:4.40.1": "6b02d5c1a8e5cb045ea9d382d71a9bfcd81da1d508ebeddf5c5118f99ce13b431af357a0458d922c03b26a00ca6ea72a861b1e15b370f20275ee73eff91fd7ce", + "@rollup/rollup-darwin-arm64@npm:4.40.1": "2c47b17a3670ff37a3a4ba6615f1514284317adedbf629b9d989f879f2ccd0c299f69c7733727150206b1edd96605ab9d94b6f0eae70cd7556542b436111d5c6", + "@rollup/rollup-darwin-x64@npm:4.40.1": "91ab2e444f00b9b98be9bc4d5bad1f1f180c3393ee6826417b1f50c5eb7cbca2b50a8fae08bfc920cff9a39b40d39ff5a06a0103598290bbe14d28caab8f2d4f", + "@rollup/rollup-freebsd-arm64@npm:4.40.1": "55486a57a0b2d276ba845d83b7d2423bcb4e16d47f7efb49d18d70c8bcda7f065750ce2754d2fcd3d6f038bf0fbf549e7a865cdad757fcbaee80681fc5b0cf31", + "@rollup/rollup-freebsd-x64@npm:4.40.1": "44d31a11edeea74bd271f929524c2b2adaa4d86912dab16bc8df19c7f36e373cec9ad8099a8784f8489d078a05b4a63d04988e7d2ff2473ee517f7703ed914a3", + "@rollup/rollup-linux-arm-gnueabihf@npm:4.40.1": "7449ef4aec80aed3935126964bbe4f571e7f270da02cf0f52bb8c039f4f7d81060a709a4b075bf4fd7b4edb4098d51644bc69c1228edadd24deeb1fb57061174", + "@rollup/rollup-linux-arm-musleabihf@npm:4.40.1": "548823023482bc71faf8ea6e9a3a2ee818d7011fd09fe70a5d2923cf2d395f9b5a3f59acfa44e3bcf20c2da947375ddb4bd83ffa81c21ca32c625bd2eddfe16b", + "@rollup/rollup-linux-arm64-gnu@npm:4.40.1": "04c11ce49644b0fbeefdb6d61ee98cb55a3ff657f89bd610f14b45d6add78ac45f53d5bfbc48edfc19b979a60c127f4619a6d7aa42122db9a60ea638a672b5aa", + "@rollup/rollup-linux-arm64-musl@npm:4.40.1": "4d257c6f80178e59a889c0df9f1d6dc8b04f28e0c7d5ff7fc8ec8037bbeed7df55c928815f654553579c8fe2c1b7030dfa4f0c46db80b5e54df68141c1dcc04d", + "@rollup/rollup-linux-loongarch64-gnu@npm:4.40.1": "e4d6fcc868ce49cc80dd3975b049998ac171a6c6faf10eec9409914bd49fd536a28c215e7d9f553af5107aa729bd1a8f524a0ba7eecaf4237368aaca555a7451", + "@rollup/rollup-linux-powerpc64le-gnu@npm:4.40.1": "3b4e4bcb11fac1048a3c93304a0efb0f84fa960b638eed465e17235a4d4d3b6710035b6b628936eefd37ba8d965773d81a27ba646952f50232ab94fc498ba7aa", + "@rollup/rollup-linux-riscv64-gnu@npm:4.40.1": "b83775740d1164c3bd07fea0c999f4a1d32c83769ee869905af24e91ba53b89a77000a78e76dcbe2210b30dce423bf4464c4d6a985b66d6c395d551745eb167e", + "@rollup/rollup-linux-riscv64-musl@npm:4.40.1": "ca1b09e4b0a34e85de5d82eb72a11604daa53c7a3612fe06110516770d31841885e54ec3cd9cd7233718616c286f81172e3a6840d958b63136826e91a8a75c68", + "@rollup/rollup-linux-s390x-gnu@npm:4.40.1": "e062f33b545d66baa4d794f96a7bdd6852db9f0749781fd5fe21f1c7348724b144ea1b0b92ea134edb6a7b02abbdeec36632147a77c2cfff2981836645b045aa", + "@rollup/rollup-linux-x64-gnu@npm:4.40.1": "4fe6c9ac21a6714f119934474f1f7553b84597569e4459d47469099479a1aab5f7384f59ff7e729d615883ce3454976a890d15eb6a372f747ba429fcde05b62d", + "@rollup/rollup-linux-x64-musl@npm:4.40.1": "61f05aa8f6df44385bc5c99850a95f791e14f63fa0e11a7f7351b3a4b45f7e719a4c5ae9562f772f3e08ce61ba887741e0564ae66e1c496aba2fde3e1cf97ec1", + "@rollup/rollup-win32-arm64-msvc@npm:4.40.1": "d4c9002b95c4b6ee842faaa5087582a0772578c0969c9ee470697a6d3fd251845481285f5a4027bc8c0524bf277f3437844cae9936c5f96ca753dcca61e2f47f", + "@rollup/rollup-win32-ia32-msvc@npm:4.40.1": "446e3ce5b037d1847af84e9a2b52734ae9f5425937fec2558d26ffb5c253dd8925dc35591abd78b0d43f7154222e47ee9aaeb3b167b3d69627805a97c5147185", + "@rollup/rollup-win32-x64-msvc@npm:4.40.1": "39fe3c6b86ef880fb1d1261f6096d19707584c628271d6ae01f5a5f50d8a24ef62128b5929064c0aed4390c7c0c0b7cc9590e300fa5f10ed624816748da2fbb2", + "@swc/core-darwin-arm64@npm:1.11.24": "18b0b96a5da816cdabddc7638fe520003199ec44fe00dd8b59a7fddf21e332e52c897c6721e854677404d4f223e3f1efe88992c5af5ba7a8d6471bc237b936ec", + "@swc/core-darwin-arm64@npm:1.5.3": "8999da30eed8259e61678d4bc83f9eb084955419cd4bb4b3e86d1d4e9d52319c2c35c175b08212b72112bb60f7f4a86e58ac968e9f7259b661d228b67a9df664", + "@swc/core-darwin-x64@npm:1.11.24": "9fa6d165b9ada627900f9e4916f91cda7f26364f8f9bb6e37b8036ca1ee4231572aba731aa2ea8056b65a7360bf547538407fc12d0984b184e5bb14c9712f3f0", + "@swc/core-darwin-x64@npm:1.5.3": "3df1762d5ba3812b95229c41d7de4cb4dd8519bb58213e0aae2eb3f80696b1193561d450e6e897af58afdd5632edfe4607e669648e039bbb7a4f3533b3aa38ee", + "@swc/core-linux-arm-gnueabihf@npm:1.11.24": "2721dbdfa06753fbf00f8fef752dbb922d2149ddf67d0b4eb90505e7d1a06a00b30b574242ae53f6c30b45fd4907df0faba42e69ac63bc2ab1df867830471a3d", + "@swc/core-linux-arm-gnueabihf@npm:1.5.3": "f3f1debf391bb919de3bda8e16f5c8e6d8cfb9dea457cec3ab46e454f82c77f760681a53fd0b80c215e6d93bc91a202e20683c8eef3c7b4fcacacd33245f89fe", + "@swc/core-linux-arm64-gnu@npm:1.11.24": "f83aab231925b7bf60808ba40885e13cf6cd146d5b6557e8423324734742d54ca2a40f3a9b7b3e654ba23d2c3b0154321448874ea5ba6dcd7000bd1ba277e7eb", + "@swc/core-linux-arm64-gnu@npm:1.5.3": "747daae9eb5300b24941c62ca89cbc775eee206ac4b76a5961a5cfc45c4fe07c537497f31d3a7c415783e84a4425621b4b02642d1c266332d29dfb88210d7306", + "@swc/core-linux-arm64-musl@npm:1.11.24": "d45417c37c0f11ecae33df2ee6061e44099874cc1213d82cd6209ab9b1ac048fad32fd7516e32936ac5ada7861945876c0109970726cf478e06990d602466e8c", + "@swc/core-linux-arm64-musl@npm:1.5.3": "c9c58710d8ef12218e3da5a4111ee6fb619d5a84d922b97c746bf74c89676dd1de901bf6513d4653d45cd639ffb28bafd1a48c876643d84b1a1c5532591220a4", + "@swc/core-linux-x64-gnu@npm:1.11.24": "a3a6944f8eb4f0b3d508a238f173a6de5f2555dfb0990553e7c187b2f97995248489070425eabfca8bcfb2460f0ed1e03ed74379eb7918339e77c61860eadcd5", + "@swc/core-linux-x64-gnu@npm:1.5.3": "80ccc1002f0a410ed988441d5c797e9a697e371cc2c4645b2dd22bb5f15a71f46532deca5e5d0a0d7096064deb13bfe46fb423365b7b617cb29f4c8ade068d9d", + "@swc/core-linux-x64-musl@npm:1.11.24": "b6ec67367381d4e2ae97ef6106592c0558fcfb0c3d0d3d6886f04c2f4f4cb87472028dab873edde94a311a053f1e6e9cc6f1b994b383a9577709cde4fdb43f4c", + "@swc/core-linux-x64-musl@npm:1.5.3": "468a0cf52c6b6f05811a58eb7038486df3bb96709f5081ceb17b2b847ade277ea209c7ac609f05046a809bc15444b30db696af3ef745ee16c43e8ff09ef1f585", + "@swc/core-win32-arm64-msvc@npm:1.11.24": "399f45295ed6ca667776d7af271ef603925c1e24a90441486441c1319861f9fe95b62edbc32f63d034b64ded6cfbeca4aff5e03392206812f16439867da37b6d", + "@swc/core-win32-arm64-msvc@npm:1.5.3": "de74f5ef05f3db298a04b354f820705d15b8bd139f726fff5e793f7dab06683142326b9cf4f5db916c52060f2cc3935452fea40dd61986db918514bdc0c4caca", + "@swc/core-win32-ia32-msvc@npm:1.11.24": "59839c3e0adae3821236c252f337c96303db1f57bc6e3ae662c64db2b1c0c26d72aff548c40b51519642bf85178136398c0748ac2fa0bb4f876d531032354c0d", + "@swc/core-win32-ia32-msvc@npm:1.5.3": "7f91ce3217cbf97581faa439365a33623d3770594088e9bdbe897149fde0083bb12da7a58c1cb274d807f5f5cdd624ab22624c2a61d7df18027e0b49680b0321", + "@swc/core-win32-x64-msvc@npm:1.11.24": "c00ac210a848844ce712cc99d4f58eac3ceb69707dd7d4c5c28f3e3ba9b20989cc98df64efa6d908c412e159120a8e9c3687a746cbdbdbc243db304abf1dedf2", + "@swc/core-win32-x64-msvc@npm:1.5.3": "c9e2f8d6d6ea59196aea6441c91e75a7a2c673e9485f019f5248a44b048bba355519244ed99114fa38f1d7da0b0145200f582080b0d34bd8be038130cfdb5a2e", + "@unrs/resolver-binding-darwin-arm64@npm:1.7.2": "417b86140fd118e76a188bd13c0e4144d75a437e2567f17f14dbd469069a76dd265672a030f90cefcb6a8ed22e5e3504f3c6435c4f3178fff8161ad243356505", + "@unrs/resolver-binding-darwin-x64@npm:1.7.2": "6200e3b907b7aa187118c44fdc5e92ac3113e9c6d44d352d85424a51d08db24eb181e8ea1f1181bcdaa776b749362efbfc578ffbb942ccb46e9a2c4370330480", + "@unrs/resolver-binding-freebsd-x64@npm:1.7.2": "e35881d53aa74c683f258365d97407828f9bca513b4f670819aa5e8ff0a044ce15f040cbf92cfc1b2ca52d4c3a48ac5a4684c1c6ac63365ae14276b56c3016f6", + "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.7.2": "e66d48a4c053af3eeccf3f88a2f8b7c4a33ddb86a1b1367f81ad8d513fa3b273d0075fb6033a1a3669aa86cf8f2ab726f9c6774726712790156ed13203f7d5a5", + "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.7.2": "5d8215cdc1ec8ea64633ea25ef7c293b3f5a09523097be5ed39cfbc2d054934ecff4e8d5630bd483b799060ee29b3c818903113c74f891540e0039af0c7d63ac", + "@unrs/resolver-binding-linux-arm64-gnu@npm:1.7.2": "28c3cc5f51cf546229f2518aefcc58a052e98257f8637c9c0468faba35bd1776a7b2c1cc2bd972ad8b297b2c8011aa7c6a4c99828d96190f984ba76ec661252f", + "@unrs/resolver-binding-linux-arm64-musl@npm:1.7.2": "05017c135d6fff23f30128c9a2d1fda36944fc9fc8f2491affdd756601f2d94e087e7c5d36d5d7c41c55202575c57051a2247e7c2cf3bfbee6c9906f927a7ff7", + "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.7.2": "e6a9ee85e18f14bbc0ff9dc0a10f7b61ddba2997e5de6b88472b6e885797827fd0da3bbb0a2d69dcba7b6a7f8f0b19b18b218ba484cfb7b5a8821505d811eba0", + "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.7.2": "f8bcec8a1776fbb7fa2e94ec597c188991936076f4646e2b2aa65e0d58a7a0f200b494c8b648f27888818fa21429c1d0ac697f153036ed29f3169a75db1958f5", + "@unrs/resolver-binding-linux-riscv64-musl@npm:1.7.2": "1ad30a039a17de53379a256945e1c9e8b0cb3f85a8b2cac519abc373e4ed85f190f160b055d8e4275060112c4022d889ca9f8cea78052de050c23aea114a829a", + "@unrs/resolver-binding-linux-s390x-gnu@npm:1.7.2": "b18e161a9665cbaaacc203e4f00b81bd2a47cac19869be143bc15c4f16cb3b777093db93fa63844502c47c1314686a3d7f9aa12fa17fb126b140465ad8769a01", + "@unrs/resolver-binding-linux-x64-gnu@npm:1.7.2": "7bb19791caa4a8b4dc683803b628b00d8dc41843c99ba58de3d4e0c99122498c2ce8f44bc54ed69df9e5cb6531b6aa692a9e872f2ef33beed6a98e0bf2de6733", + "@unrs/resolver-binding-linux-x64-musl@npm:1.7.2": "8755854a1bcb392c0422b966d98802ff0dab4fa002f062869dab8b2ba1c3d53ce0865042f78d9ca2fa5f3c4340a60c65b42a851d6dff85e4600aeaa210ef90d5", + "@unrs/resolver-binding-wasm32-wasi@npm:1.7.2": "1715ff33785dc610bca6130064bad5cfc111bb66bafe6d2fe4f23db854051ec147df1c4d228264139746e68156084688270112e465f944ec9d920bc1dae69440", + "@unrs/resolver-binding-win32-arm64-msvc@npm:1.7.2": "777a0ecaa6095423132b6ac8723dea7546ce57babe12135aaa5468fe4bac38637c02f30308d6cba47031281b54ed41c1b5eb91ea24b0da42b45f5555c7c002d6", + "@unrs/resolver-binding-win32-ia32-msvc@npm:1.7.2": "e356d7e8494f127a0de7ace9c9e898e9fd154b7f145b9e4740e7e3ec0e69349e8f31f148e17a45afda0ac562209520a7ee73fb57b7d380bff852c194659508cf", + "@unrs/resolver-binding-win32-x64-msvc@npm:1.7.2": "8446f0a75d1cb833fa8cf9a1f6960e543b8151784b7954d385aba86049821bd1d5ee6cd35f194b8ab0a3324e07ce3f63b56aef1dc9cb8dbe352c86f0aaa4c095", + "dmg-license@npm:1.0.11": "36c0a7b030801b91216affa9b2bb00caa345b2327f298accb2263a80a0320ca305f90b99da68007d187c830c543410d58a0a2bbc229e8d169b0e1d1652ff42aa", + "iconv-corefoundation@npm:1.1.7": "0189733ef51a9f481379202cb1919f2677efc44aa014ba662a6fd99e47993e350eab0ff724ed18cda8011c9b78c4702b2d374f732955f1def3fd2a14a29d25c0" +} diff --git a/system/modules/gitea.nix b/system/modules/gitea.nix new file mode 100644 index 0000000..91544a9 --- /dev/null +++ b/system/modules/gitea.nix @@ -0,0 +1,8 @@ +{ + services.gitea = { + enable = true; + database = { + type = "postgres"; + }; + }; +} diff --git a/system/modules/mail-server/server.nix b/system/modules/mail-server/server.nix index 5035371..69a222c 100644 --- a/system/modules/mail-server/server.nix +++ b/system/modules/mail-server/server.nix @@ -30,16 +30,6 @@ let ''; authConf = "${dovecotSecretPath}/dovecot-auth.conf.ext"; - oauthConf = pkgs.writeText "dovecot-oauth.conf.ext" '' - oauth2 { - client_id = dovecot - client_secret = 1l9EyvmaDQBMUHXgPkH69RwNcm7gDFbB - introspection_mode = post - introspection_url = https://keycloak.net.dn/realms/master/protocol/openid-connect/token/introspect - username_attribute = email - } - ''; - dovecotDomain = config.services.postfix.settings.main.myhostname; in { @@ -336,7 +326,6 @@ in lda_mailbox_autocreate = yes !include ${authConf} - !include ${oauthConf} ''; }; diff --git a/system/modules/packages.nix b/system/modules/packages.nix index e9e4a21..a3599a8 100644 --- a/system/modules/packages.nix +++ b/system/modules/packages.nix @@ -1,57 +1,50 @@ -{ - pkgs, - ... -}: -{ - environment.systemPackages = ( - with pkgs; - [ - file +{pkgs, ...}: { + environment.systemPackages = with pkgs; [ + file - man-pages - man-pages-posix - stdmanpages + man-pages + man-pages-posix + stdmanpages - # Binary cache platform - cachix + # Binary cache platform + cachix - # Utils - upower - jq - bat - btop - eza - fzf - neofetch - ripgrep - tree - tldr # Alternative for man - wget - unzip - p7zip - killall - zip - glxinfo # OpenGL info - pciutils # PCI info - xdotool # Keyboard input simulation - ffmpeg # Video encoding - mpv # Media player - brightnessctl + # Utils + upower + jq + bat + btop + eza + fzf + neofetch + ripgrep + tree + tldr # Alternative for man + wget + unzip + p7zip + killall + zip + glxinfo # OpenGL info + pciutils # PCI info + xdotool # Keyboard input simulation + ffmpeg # Video encoding + mpv # Media player + brightnessctl - # Dev - git - gh # Github cli tool - gnumake - lm_sensors - pkg-config - nodejs - yarn-berry - rustup - gcc - zig + # Dev + git + gh # Github cli tool + gnumake + lm_sensors + pkg-config + nodejs + yarn-berry + rustup + gcc + zig - # Media - vlc - ] - ); + # Media + vlc + ]; }