update: actual budget server
This commit is contained in:
parent
ebc7481553
commit
85feeb7b3f
15 changed files with 709 additions and 496 deletions
40
README.md
40
README.md
|
|
@ -8,25 +8,18 @@
|
||||||
|
|
||||||
## ✨ Main Applications
|
## ✨ Main Applications
|
||||||
|
|
||||||
- [X] Hyprland
|
- [x] Hyprland
|
||||||
- [X] Neovim
|
- [x] NVF
|
||||||
- ✅ [lazyvim](https://github.com/LazyVim/LazyVim)
|
- [x] Waybar
|
||||||
- ✅ [treesitter](https://github.com/nvim-treesitter/nvim-treesitter)
|
- [x] Hyprlock
|
||||||
- ❌ mason (not support on NixOS)
|
- [x] Hypridle
|
||||||
- [X] Waybar
|
- [x] Swaync (Notification Center)
|
||||||
- [X] Hyprlock
|
- [x] Swww (Wallpaper)
|
||||||
- [X] Hypridle
|
- [x] Ghostty (Terminal)
|
||||||
- [X] Swaync (Notification Center)
|
- [x] SDDM (Display Manager)
|
||||||
- [X] Swww (Wallpaper)
|
- [x] Fish (shell)
|
||||||
- [X] Ghostty (Terminal)
|
- [x] Rofi (Application Launcher)
|
||||||
- [X] SDDM (Display Manager)
|
- [x] Stylix
|
||||||
- [X] Fish (shell)
|
|
||||||
- [X] Rofi (Application Launcher)
|
|
||||||
|
|
||||||
## 🎈 Theme
|
|
||||||
|
|
||||||
- Catppuccin (Macchiato Lavender)
|
|
||||||
- plymouth (Boot Splash)
|
|
||||||
|
|
||||||
## 🎮️ Game
|
## 🎮️ Game
|
||||||
|
|
||||||
|
|
@ -38,15 +31,14 @@
|
||||||
- Virt Manager (libvirt)
|
- Virt Manager (libvirt)
|
||||||
- Windows 11 example config: [win11_kvm.xml](./home/config/vm/win11_kvm.xml)
|
- Windows 11 example config: [win11_kvm.xml](./home/config/vm/win11_kvm.xml)
|
||||||
|
|
||||||
## ⌨️ Input (Fcitx5)
|
## ⌨️ Input (Fcitx5)
|
||||||
|
|
||||||
- Rime (bopomofo, pinyin)
|
- Rime (bopomofo, pinyin)
|
||||||
- Mozc (Japanese)
|
- Mozc (Japanese)
|
||||||
|
|
||||||
## 🌐 VPN
|
## 🌐 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.
|
> 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
|
## 💿️ 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
|
### Example
|
||||||
|
|
||||||
|
|
|
||||||
6
flake.lock
generated
6
flake.lock
generated
|
|
@ -29,11 +29,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1753936121,
|
"lastModified": 1757826057,
|
||||||
"narHash": "sha256-gRZAewG5grwOchBqsZiOpJud3dMUColzvCoCkMRmJVo=",
|
"narHash": "sha256-KE6kxoDme82jgmPUE67mvs/kjQBTfSxIuMufuEUSUSo=",
|
||||||
"owner": "DACHXY",
|
"owner": "DACHXY",
|
||||||
"repo": "actual-budget-api",
|
"repo": "actual-budget-api",
|
||||||
"rev": "368035ec590180f1229b1fccef33c16a2ba4df9a",
|
"rev": "1c7a816cbfe17c5821b446b5582e88404cb23596",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
596
flake.nix
596
flake.nix
|
|
@ -119,306 +119,305 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs = {
|
||||||
{
|
self,
|
||||||
self,
|
nixpkgs,
|
||||||
nixpkgs,
|
nix-index-database,
|
||||||
nix-index-database,
|
lanzaboote,
|
||||||
lanzaboote,
|
home-manager,
|
||||||
home-manager,
|
...
|
||||||
...
|
} @ inputs: let
|
||||||
}@inputs:
|
system = "x86_64-linux";
|
||||||
let
|
nix-version = "25.05";
|
||||||
system = "x86_64-linux";
|
|
||||||
nix-version = "25.05";
|
|
||||||
|
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
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
|
systemd.network.netdevs."br0" = {
|
||||||
common-settings = {
|
netdevConfig = {
|
||||||
modules = [
|
Name = "br0";
|
||||||
home-manager.nixosModules.default
|
Kind = "bridge";
|
||||||
nix-index-database.nixosModules.nix-index
|
};
|
||||||
inputs.sops-nix.nixosModules.sops
|
};
|
||||||
inputs.chaotic.nixosModules.default
|
|
||||||
inputs.actual-budget-api.nixosModules.default
|
systemd.network.networks."10-lan-bridge" = {
|
||||||
inputs.stylix.nixosModules.stylix
|
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 = {
|
overlays = [];
|
||||||
inherit
|
|
||||||
helper
|
|
||||||
inputs
|
|
||||||
system
|
|
||||||
nix-version
|
|
||||||
self
|
|
||||||
;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# Declaring All Devices
|
# Laptop
|
||||||
devices = {
|
dn-lap = {
|
||||||
# Home Computer
|
hostname = "dn-lap";
|
||||||
dn-pre7780 = {
|
username = "danny";
|
||||||
hostname = "dn-pre7780";
|
domain = "net.dn";
|
||||||
domain = "net.dn";
|
extra-modules = [
|
||||||
username = "danny";
|
lanzaboote.nixosModules.lanzaboote
|
||||||
extra-modules = [
|
./system/dev/dn-lap
|
||||||
lanzaboote.nixosModules.lanzaboote
|
];
|
||||||
./system/dev/dn-pre7780
|
overlays = [
|
||||||
|
];
|
||||||
# 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)
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
in
|
|
||||||
{
|
# Server
|
||||||
nixosConfigurations =
|
dn-server = {
|
||||||
(builtins.mapAttrs (
|
hostname = "dn-server";
|
||||||
dev: conf:
|
username = "danny";
|
||||||
let
|
domain = "net.dn";
|
||||||
domain = if conf.domain != null then conf.domain else "local";
|
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;
|
inherit (conf) username hostname;
|
||||||
in
|
in
|
||||||
nixpkgs.lib.nixosSystem {
|
nixpkgs.lib.nixosSystem {
|
||||||
modules = [
|
modules =
|
||||||
{
|
[
|
||||||
system.stateVersion = nix-version;
|
{
|
||||||
home-manager = {
|
system.stateVersion = nix-version;
|
||||||
backupFileExtension = "backup-hm";
|
home-manager = {
|
||||||
useUserPackages = true;
|
backupFileExtension = "backup-hm";
|
||||||
useGlobalPkgs = true;
|
useUserPackages = true;
|
||||||
extraSpecialArgs = {
|
useGlobalPkgs = true;
|
||||||
inherit
|
extraSpecialArgs = {
|
||||||
helper
|
inherit
|
||||||
inputs
|
helper
|
||||||
system
|
inputs
|
||||||
nix-version
|
system
|
||||||
devices
|
nix-version
|
||||||
username
|
devices
|
||||||
;
|
username
|
||||||
};
|
;
|
||||||
users."${username}" = lib.mkIf (!((conf ? isVM) && (conf.isVM))) {
|
};
|
||||||
imports = [
|
users."${username}" = lib.mkIf (!((conf ? isVM) && (conf.isVM))) {
|
||||||
inputs.hyprland.homeManagerModules.default
|
imports = [
|
||||||
inputs.caelestia-shell.homeManagerModules.default
|
inputs.hyprland.homeManagerModules.default
|
||||||
inputs.zen-browser.homeManagerModules.${system}.default
|
inputs.caelestia-shell.homeManagerModules.default
|
||||||
inputs.nvf.homeManagerModules.default
|
inputs.zen-browser.homeManagerModules.${system}.default
|
||||||
{
|
inputs.nvf.homeManagerModules.default
|
||||||
home = {
|
{
|
||||||
homeDirectory = "/home/${username}";
|
home = {
|
||||||
stateVersion = nix-version;
|
homeDirectory = "/home/${username}";
|
||||||
};
|
stateVersion = nix-version;
|
||||||
# Let Home Manager install and manage itself.
|
};
|
||||||
programs.home-manager.enable = true;
|
# 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"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
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
|
|
||||||
''}";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
networking = {
|
||||||
# Node
|
inherit domain;
|
||||||
vm-2 = {
|
hostName = hostname;
|
||||||
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;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
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: {
|
systemd.services.link-kube-config = {
|
||||||
hypervisor = "qemu";
|
wantedBy = ["multi-user.target"];
|
||||||
vcpu = 4;
|
serviceConfig = {
|
||||||
mem = 8192;
|
Type = "oneshot";
|
||||||
interfaces = [
|
ExecStart = "${pkgs.writeShellScript "link-kube-config.sh" ''
|
||||||
{
|
target="/etc/kubernetes/cluster-admin.kubeconfig"
|
||||||
type = "tap";
|
if [ -e "$target" ]; then
|
||||||
id = "${name}";
|
[ ! -d "/root/.kube" ] && mkdir -p "/root/.kube"
|
||||||
mac = value.mac;
|
ln -sf $target /root/.kube/config
|
||||||
}
|
fi
|
||||||
];
|
''}";
|
||||||
shares = [
|
};
|
||||||
{
|
};
|
||||||
tag = "ro-store";
|
|
||||||
source = "/nix/store";
|
|
||||||
mountPoint = "/nix/.ro-store";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
in
|
};
|
||||||
lib.mapAttrs' (
|
# Node
|
||||||
name: value:
|
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 (
|
lib.nameValuePair name (
|
||||||
nixpkgs.lib.nixosSystem {
|
nixpkgs.lib.nixosSystem {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
|
@ -449,15 +448,15 @@
|
||||||
systemd.network.networks."20-lan" = {
|
systemd.network.networks."20-lan" = {
|
||||||
matchConfig.Type = "ether";
|
matchConfig.Type = "ether";
|
||||||
networkConfig = {
|
networkConfig = {
|
||||||
Address = [ "${value.ip}/24" ];
|
Address = ["${value.ip}/24"];
|
||||||
Gateway = "192.168.0.1";
|
Gateway = "192.168.0.1";
|
||||||
DNS = [ "192.168.0.1" ];
|
DNS = ["192.168.0.1"];
|
||||||
DHCP = "no";
|
DHCP = "no";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.br-netfilter = {
|
systemd.services.br-netfilter = {
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = ["multi-user.target"];
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
ExecStart = "/run/current-system/sw/bin/modprobe br_netfilter";
|
ExecStart = "/run/current-system/sw/bin/modprobe br_netfilter";
|
||||||
};
|
};
|
||||||
|
|
@ -480,22 +479,23 @@
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
) vmList
|
|
||||||
)
|
)
|
||||||
// {
|
vmList
|
||||||
vps = nixpkgs.lib.nixosSystem {
|
)
|
||||||
inherit system;
|
// {
|
||||||
specialArgs = common-settings.args;
|
vps = nixpkgs.lib.nixosSystem {
|
||||||
modules = [
|
inherit system;
|
||||||
inputs.disko.nixosModules.disko
|
specialArgs = common-settings.args;
|
||||||
./system/dev/generic
|
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;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (pkgs) writeShellScript;
|
inherit (pkgs) writeShellScript;
|
||||||
inherit (lib) replaceString;
|
inherit (lib) replaceString optionalString;
|
||||||
inherit (builtins) toJSON mapAttrs;
|
inherit (builtins) toJSON;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
mkToggleScript =
|
mkToggleScript =
|
||||||
|
|
@ -14,6 +14,7 @@ in
|
||||||
start,
|
start,
|
||||||
stop,
|
stop,
|
||||||
icon ? "",
|
icon ? "",
|
||||||
|
notify-icon ? "",
|
||||||
extra ? { },
|
extra ? { },
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
|
@ -26,10 +27,14 @@ in
|
||||||
case $1 in toggle)
|
case $1 in toggle)
|
||||||
if systemctl --user is-active --quiet "$SERVICE_NAME"; then
|
if systemctl --user is-active --quiet "$SERVICE_NAME"; then
|
||||||
systemctl --user stop "$SERVICE_NAME"
|
systemctl --user stop "$SERVICE_NAME"
|
||||||
notify-send "${icon} ''\${SERVICE_NAME^}" "stopping"
|
notify-send ${
|
||||||
|
optionalString (notify-icon != "") "-i ${notify-icon}"
|
||||||
|
} "${icon} ''\${SERVICE_NAME^}" "stopping"
|
||||||
else
|
else
|
||||||
systemctl --user start "$SERVICE_NAME"
|
systemctl --user start "$SERVICE_NAME"
|
||||||
notify-send "${icon} ''\${SERVICE_NAME^}" "starting"
|
notify-send ${
|
||||||
|
optionalString (notify-icon != "") "-i ${notify-icon}"
|
||||||
|
}"${icon} ''\${SERVICE_NAME^}" "starting"
|
||||||
fi
|
fi
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,66 +1,70 @@
|
||||||
{ pkgs, ... }:
|
{
|
||||||
pkgs.writers.writePython3Bin "memeSelector" { libraries = with pkgs.python3Packages; [ requests ]; }
|
pkgs,
|
||||||
''
|
url,
|
||||||
import requests
|
...
|
||||||
import xml.etree.ElementTree as ET
|
}:
|
||||||
import urllib.parse
|
pkgs.writers.writePython3Bin "memeSelector" {libraries = with pkgs.python3Packages; [requests];}
|
||||||
import sys
|
''
|
||||||
import os
|
import requests
|
||||||
import tempfile
|
import xml.etree.ElementTree as ET
|
||||||
import subprocess
|
import urllib.parse
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import subprocess
|
||||||
|
|
||||||
BASE_URL = "https://nextcloud.net.dn/public.php/dav/files/pygHoPB5LxDZbeY/"
|
BASE_URL = "${url}"
|
||||||
headers = {"Depth": "1"}
|
headers = {"Depth": "1"}
|
||||||
resp = requests.request(
|
resp = requests.request(
|
||||||
"PROPFIND",
|
"PROPFIND",
|
||||||
BASE_URL,
|
BASE_URL,
|
||||||
headers=headers,
|
headers=headers,
|
||||||
verify="${"" + ../../system/extra/ca.crt}"
|
verify="${"" + ../../system/extra/ca.crt}"
|
||||||
)
|
)
|
||||||
|
|
||||||
if resp.status_code not in (200, 207):
|
if resp.status_code not in (200, 207):
|
||||||
print(f"Error: Http {resp.status_code}")
|
print(f"Error: Http {resp.status_code}")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
root = ET.fromstring(resp.text)
|
root = ET.fromstring(resp.text)
|
||||||
ns = {"d": "DAV:"}
|
ns = {"d": "DAV:"}
|
||||||
|
|
||||||
files = []
|
files = []
|
||||||
for href in root.findall(".//d:href", ns):
|
for href in root.findall(".//d:href", ns):
|
||||||
path = href.text
|
path = href.text
|
||||||
if not path:
|
if not path:
|
||||||
continue
|
continue
|
||||||
filename = urllib.parse.unquote(path.split("/")[-1])
|
filename = urllib.parse.unquote(path.split("/")[-1])
|
||||||
|
|
||||||
if filename and not filename.endswith("/"):
|
if filename and not filename.endswith("/"):
|
||||||
files.append(filename)
|
files.append(filename)
|
||||||
|
|
||||||
if not files:
|
if not files:
|
||||||
print("No files found")
|
print("No files found")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
rofi = subprocess.run(
|
rofi = subprocess.run(
|
||||||
["rofi", "-dmenu", "-p", "Meme"],
|
["rofi", "-i", "-dmenu", "-p", "Meme"],
|
||||||
input="\n".join(files).encode(),
|
input="\n".join(files).encode(),
|
||||||
stdout=subprocess.PIPE
|
stdout=subprocess.PIPE
|
||||||
)
|
)
|
||||||
|
|
||||||
selected = rofi.stdout.decode().strip()
|
selected = rofi.stdout.decode().strip()
|
||||||
if not selected:
|
if not selected:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
url = BASE_URL + urllib.parse.quote(selected)
|
url = BASE_URL + urllib.parse.quote(selected)
|
||||||
tmpfile = os.path.join(tempfile.gettempdir(), 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:
|
with open(tmpfile, "rb") as f:
|
||||||
subprocess.run("wl-copy", stdin=f)
|
subprocess.run("wl-copy", stdin=f)
|
||||||
|
|
||||||
subprocess.run([
|
subprocess.run([
|
||||||
"notify-send",
|
"notify-send",
|
||||||
"-i", tmpfile,
|
"-i", tmpfile,
|
||||||
"Meme Copied: ",
|
"Meme Copied: ",
|
||||||
f"{selected}"
|
f"{selected}"
|
||||||
])
|
])
|
||||||
''
|
''
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
|
osConfig,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.generators) mkLuaInline;
|
inherit (lib.generators) mkLuaInline;
|
||||||
|
|
@ -232,25 +233,37 @@ in {
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "<C-j>";
|
key = "<C-j>";
|
||||||
mode = ["n" "t"];
|
mode = [
|
||||||
|
"n"
|
||||||
|
"t"
|
||||||
|
];
|
||||||
action = "<C-\\><C-n><C-w>j";
|
action = "<C-\\><C-n><C-w>j";
|
||||||
nowait = true;
|
nowait = true;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "<C-k>";
|
key = "<C-k>";
|
||||||
mode = ["n" "t"];
|
mode = [
|
||||||
|
"n"
|
||||||
|
"t"
|
||||||
|
];
|
||||||
action = "<C-\\><C-n><C-w>k";
|
action = "<C-\\><C-n><C-w>k";
|
||||||
nowait = true;
|
nowait = true;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "<C-l>";
|
key = "<C-l>";
|
||||||
mode = ["n" "t"];
|
mode = [
|
||||||
|
"n"
|
||||||
|
"t"
|
||||||
|
];
|
||||||
action = "<C-\\><C-n><C-w>l";
|
action = "<C-\\><C-n><C-w>l";
|
||||||
nowait = true;
|
nowait = true;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
key = "<C-h>";
|
key = "<C-h>";
|
||||||
mode = ["n" "t"];
|
mode = [
|
||||||
|
"n"
|
||||||
|
"t"
|
||||||
|
];
|
||||||
action = "<C-\\><C-n><C-w>h";
|
action = "<C-\\><C-n><C-w>h";
|
||||||
nowait = true;
|
nowait = true;
|
||||||
}
|
}
|
||||||
|
|
@ -414,14 +427,28 @@ in {
|
||||||
};
|
};
|
||||||
nix = {
|
nix = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
format.type = "nixfmt";
|
||||||
lsp = {
|
lsp = {
|
||||||
enable = true;
|
|
||||||
server = "nixd";
|
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;
|
sql.enable = true;
|
||||||
clang.enable = true;
|
clang.enable = true;
|
||||||
ts.enable = true;
|
ts = {
|
||||||
|
enable = true;
|
||||||
|
format.type = "prettierd";
|
||||||
|
extensions = {
|
||||||
|
ts-error-translator.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
python.enable = true;
|
python.enable = true;
|
||||||
markdown.enable = true;
|
markdown.enable = true;
|
||||||
html.enable = true;
|
html.enable = true;
|
||||||
|
|
@ -627,7 +654,15 @@ in {
|
||||||
autopairs.nvim-autopairs.enable = true;
|
autopairs.nvim-autopairs.enable = true;
|
||||||
|
|
||||||
autocomplete = {
|
autocomplete = {
|
||||||
blink-cmp.enable = true;
|
blink-cmp = {
|
||||||
|
enable = true;
|
||||||
|
setupOpts = {
|
||||||
|
completion = {
|
||||||
|
menu.border = "rounded";
|
||||||
|
documentation.window.border = "rounded";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
snippets.luasnip = {
|
snippets.luasnip = {
|
||||||
|
|
@ -705,6 +740,10 @@ in {
|
||||||
multicursors.enable = true;
|
multicursors.enable = true;
|
||||||
undotree.enable = true;
|
undotree.enable = true;
|
||||||
|
|
||||||
|
yazi-nvim = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
images = {
|
images = {
|
||||||
img-clip.enable = true;
|
img-clip.enable = true;
|
||||||
};
|
};
|
||||||
|
|
@ -753,7 +792,9 @@ in {
|
||||||
event = "msg_show";
|
event = "msg_show";
|
||||||
kind = "bufwrite";
|
kind = "bufwrite";
|
||||||
};
|
};
|
||||||
opts = {skip = true;};
|
opts = {
|
||||||
|
skip = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
filter = {
|
filter = {
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,14 @@ let
|
||||||
inherit (lib) optionalString;
|
inherit (lib) optionalString;
|
||||||
|
|
||||||
gamemodeToggle = mkToggleScript {
|
gamemodeToggle = mkToggleScript {
|
||||||
service = "gamemoded";
|
service = "gamemodedr";
|
||||||
start = "on";
|
start = "on";
|
||||||
stop = "off";
|
stop = "off";
|
||||||
icon = "";
|
icon = "";
|
||||||
|
notify-icon = "preferences-desktop-gaming";
|
||||||
extra = {
|
extra = {
|
||||||
text = "$(pgrep -c gamemode)";
|
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} -"
|
"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 === #
|
# === waybar === #
|
||||||
systemd.user.services.waybar = lib.mkIf config.programs.waybar.enable {
|
systemd.user.services.waybar = lib.mkIf config.programs.waybar.enable {
|
||||||
Unit = {
|
Unit = {
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,14 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib) optionalString;
|
inherit (lib) optionalString;
|
||||||
|
geVersion = "10-15";
|
||||||
monitors = [
|
monitors = [
|
||||||
"desc:ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271"
|
"desc:ASUSTek COMPUTER INC ASUS VG32VQ1B 0x00002271"
|
||||||
"desc:Acer Technologies XV272U V3 1322131231233"
|
"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
|
in
|
||||||
{
|
{
|
||||||
networking.firewall.allowedTCPPortRanges = [
|
networking.firewall.allowedTCPPortRanges = [
|
||||||
|
|
@ -19,6 +22,10 @@ in
|
||||||
from = 8000;
|
from = 8000;
|
||||||
to = 8100;
|
to = 8100;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
from = 31000;
|
||||||
|
to = 31010;
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.latest;
|
hardware.nvidia.package = lib.mkForce config.boot.kernelPackages.nvidiaPackages.latest;
|
||||||
|
|
@ -197,11 +204,12 @@ in
|
||||||
echo "AUTOEXEC LOADED SUCCESSFULLY!"
|
echo "AUTOEXEC LOADED SUCCESSFULLY!"
|
||||||
host_writeconfig
|
host_writeconfig
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Proton GE
|
# Proton GE
|
||||||
".steam/root/compatibilitytools.d/GE-Proton10-10" = {
|
".steam/root/compatibilitytools.d/GE-Proton${geVersion}" = {
|
||||||
source = fetchTarball {
|
source = fetchTarball {
|
||||||
url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton10-10/GE-Proton10-10.tar.gz";
|
url = "https://github.com/GloriousEggroll/proton-ge-custom/releases/download/GE-Proton${geVersion}/GE-Proton${geVersion}.tar.gz";
|
||||||
sha256 = "sha256:1vkj66x84yqmpqm857hjzmx1s02h2lffcbc60jdfqz9xj34dx5jc";
|
sha256 = "sha256:0iv7vak4a42b5m772gqr6wnarswib6dmybfcdjn3snvwxcb6hbsm";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
".steam/root/compatibilitytools.d/CachyOS-Proton10-0_v3" = {
|
".steam/root/compatibilitytools.d/CachyOS-Proton10-0_v3" = {
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ in
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
})
|
})
|
||||||
(import ../../modules/actual.nix {
|
(import ../../modules/actual {
|
||||||
fqdn = "actual.net.dn";
|
fqdn = "actual.net.dn";
|
||||||
})
|
})
|
||||||
(import ../../modules/nextcloud.nix {
|
(import ../../modules/nextcloud.nix {
|
||||||
|
|
@ -127,7 +127,7 @@ in
|
||||||
../../../home/user/config.nix
|
../../../home/user/config.nix
|
||||||
../../../home/user/direnv.nix
|
../../../home/user/direnv.nix
|
||||||
../../../home/user/environment.nix
|
../../../home/user/environment.nix
|
||||||
../../../home/user/nvim.nix
|
../../../home/user/nvf.nix
|
||||||
../../../home/user/shell.nix
|
../../../home/user/shell.nix
|
||||||
../../../home/user/tmux.nix
|
../../../home/user/tmux.nix
|
||||||
../../../home/user/yazi.nix
|
../../../home/user/yazi.nix
|
||||||
|
|
|
||||||
|
|
@ -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}";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
99
system/modules/actual/default.nix
Normal file
99
system/modules/actual/default.nix
Normal file
|
|
@ -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}";
|
||||||
|
};
|
||||||
|
}
|
||||||
99
system/modules/actual/missing-hashes_v1.json
Normal file
99
system/modules/actual/missing-hashes_v1.json
Normal file
|
|
@ -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"
|
||||||
|
}
|
||||||
8
system/modules/gitea.nix
Normal file
8
system/modules/gitea.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
services.gitea = {
|
||||||
|
enable = true;
|
||||||
|
database = {
|
||||||
|
type = "postgres";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -30,16 +30,6 @@ let
|
||||||
'';
|
'';
|
||||||
authConf = "${dovecotSecretPath}/dovecot-auth.conf.ext";
|
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;
|
dovecotDomain = config.services.postfix.settings.main.myhostname;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
@ -336,7 +326,6 @@ in
|
||||||
lda_mailbox_autocreate = yes
|
lda_mailbox_autocreate = yes
|
||||||
|
|
||||||
!include ${authConf}
|
!include ${authConf}
|
||||||
!include ${oauthConf}
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,57 +1,50 @@
|
||||||
{
|
{pkgs, ...}: {
|
||||||
pkgs,
|
environment.systemPackages = with pkgs; [
|
||||||
...
|
file
|
||||||
}:
|
|
||||||
{
|
|
||||||
environment.systemPackages = (
|
|
||||||
with pkgs;
|
|
||||||
[
|
|
||||||
file
|
|
||||||
|
|
||||||
man-pages
|
man-pages
|
||||||
man-pages-posix
|
man-pages-posix
|
||||||
stdmanpages
|
stdmanpages
|
||||||
|
|
||||||
# Binary cache platform
|
# Binary cache platform
|
||||||
cachix
|
cachix
|
||||||
|
|
||||||
# Utils
|
# Utils
|
||||||
upower
|
upower
|
||||||
jq
|
jq
|
||||||
bat
|
bat
|
||||||
btop
|
btop
|
||||||
eza
|
eza
|
||||||
fzf
|
fzf
|
||||||
neofetch
|
neofetch
|
||||||
ripgrep
|
ripgrep
|
||||||
tree
|
tree
|
||||||
tldr # Alternative for man
|
tldr # Alternative for man
|
||||||
wget
|
wget
|
||||||
unzip
|
unzip
|
||||||
p7zip
|
p7zip
|
||||||
killall
|
killall
|
||||||
zip
|
zip
|
||||||
glxinfo # OpenGL info
|
glxinfo # OpenGL info
|
||||||
pciutils # PCI info
|
pciutils # PCI info
|
||||||
xdotool # Keyboard input simulation
|
xdotool # Keyboard input simulation
|
||||||
ffmpeg # Video encoding
|
ffmpeg # Video encoding
|
||||||
mpv # Media player
|
mpv # Media player
|
||||||
brightnessctl
|
brightnessctl
|
||||||
|
|
||||||
# Dev
|
# Dev
|
||||||
git
|
git
|
||||||
gh # Github cli tool
|
gh # Github cli tool
|
||||||
gnumake
|
gnumake
|
||||||
lm_sensors
|
lm_sensors
|
||||||
pkg-config
|
pkg-config
|
||||||
nodejs
|
nodejs
|
||||||
yarn-berry
|
yarn-berry
|
||||||
rustup
|
rustup
|
||||||
gcc
|
gcc
|
||||||
zig
|
zig
|
||||||
|
|
||||||
# Media
|
# Media
|
||||||
vlc
|
vlc
|
||||||
]
|
];
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue