Compare commits
3 commits
c6a1982ede
...
d2013a50d4
Author | SHA1 | Date | |
---|---|---|---|
d2013a50d4 | |||
af11897dda | |||
dd077d98e2 |
10 changed files with 465 additions and 121 deletions
|
@ -4,6 +4,7 @@ keys:
|
|||
- &host-raspite age1nugzw24upk8pz5lyz2z89qk8se4gpcsg3ypcs58nykncr56sevrsm8qpvj
|
||||
- &host-sgp-00 age13s6rwd3wjk2x5wkn69tdczhl3l5d7mfmlv90efsv4q67jne43qss9tcakx
|
||||
- &host-tok-00 age1t5nw2jx4dw67jkf72uxcxt72j7lq3xyj35lvl09f8kala90h2g2s2a5yvj
|
||||
- &host-la-00 age1fw2sqaa5s9c8ml6ncsexkj8ar4288387ju92ytjys4awf9aw6smqqz94dh
|
||||
- &host-massicot age1jle2auermhswqtehww9gqada8car5aczrx43ztzqf9wtcld0sfmqzaecta
|
||||
creation_rules:
|
||||
- path_regex: machines/calcite/secrets.yaml
|
||||
|
@ -31,6 +32,11 @@ creation_rules:
|
|||
- age:
|
||||
- *xin
|
||||
- *host-tok-00
|
||||
- path_regex: machines/dolomite/secrets/la-00.yaml
|
||||
key_groups:
|
||||
- age:
|
||||
- *xin
|
||||
- *host-la-00
|
||||
- path_regex: machines/secrets.yaml
|
||||
key_groups:
|
||||
- age:
|
||||
|
@ -39,6 +45,7 @@ creation_rules:
|
|||
- *host-raspite
|
||||
- *host-sgp-00
|
||||
- *host-tok-00
|
||||
- *host-la-00
|
||||
- *host-massicot
|
||||
- path_regex: home/xin/secrets.yaml
|
||||
key_groups:
|
||||
|
|
|
@ -203,6 +203,7 @@
|
|||
element-desktop
|
||||
tdesktop
|
||||
qq
|
||||
wechat-uos
|
||||
|
||||
# Password manager
|
||||
bitwarden
|
||||
|
|
38
machines/dolomite/bandwagon.nix
Normal file
38
machines/dolomite/bandwagon.nix
Normal file
|
@ -0,0 +1,38 @@
|
|||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
let
|
||||
cfg = config.isBandwagon;
|
||||
in
|
||||
{
|
||||
imports = [ (modulesPath + "/profiles/qemu-guest.nix") ];
|
||||
|
||||
|
||||
options = {
|
||||
isBandwagon = lib.mkEnableOption "Bandwagon instance";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.isBandwagon {
|
||||
boot.initrd.availableKernelModules = [ "ata_piix" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-label/NIXROOT";
|
||||
fsType = "xfs";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-label/NIXBOOT";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
boot.loader.grub.enable = lib.mkForce true;
|
||||
boot.loader.grub.version = lib.mkForce 2;
|
||||
boot.loader.grub.device = lib.mkForce "/dev/sda";
|
||||
networking.useDHCP = false;
|
||||
networking.interfaces.ens18.useDHCP = true;
|
||||
networking.interfaces.ens19.useDHCP = true;
|
||||
};
|
||||
}
|
|
@ -1,12 +1,19 @@
|
|||
{ inputs, config, pkgs, lib, modulesPath, ... }:
|
||||
let
|
||||
awsHosts = [ "sgp-00" "tok-00 "];
|
||||
bwgHosts = [ "la-00" ];
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
../sops.nix
|
||||
"${modulesPath}/virtualisation/amazon-image.nix"
|
||||
./bandwagon.nix
|
||||
./lightsail.nix
|
||||
];
|
||||
|
||||
|
||||
config = {
|
||||
isBandwagon = builtins.elem config.networking.hostName bwgHosts;
|
||||
isLightsail = builtins.elem config.networking.hostName awsHosts;
|
||||
sops = {
|
||||
secrets = {
|
||||
wg_private_key = {
|
||||
|
@ -19,7 +26,6 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
boot.loader.grub.device = lib.mkForce "/dev/nvme0n1";
|
||||
boot.kernel.sysctl = {
|
||||
"net.core.default_qdisc" = "fq";
|
||||
"net.ipv4.tcp_congestion_control" = "bbr";
|
||||
|
@ -39,9 +45,9 @@
|
|||
|
||||
custom.prometheus = {
|
||||
enable = false;
|
||||
exporters.enable = true;
|
||||
exporters.enable = false;
|
||||
grafana = {
|
||||
enable = true;
|
||||
enable = false;
|
||||
password_file = config.sops.secrets.grafana_cloud_api.path;
|
||||
};
|
||||
};
|
||||
|
|
13
machines/dolomite/lightsail.nix
Normal file
13
machines/dolomite/lightsail.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
let
|
||||
cfg = config.isLightsail;
|
||||
in
|
||||
{
|
||||
imports = [ "${modulesPath}/virtualisation/amazon-image.nix" ];
|
||||
options = {
|
||||
isLightsail = lib.mkEnableOption "Lightsail instance";
|
||||
};
|
||||
config = lib.mkIf cfg.isLightsail{
|
||||
boot.loader.grub.device = lib.mkForce "/dev/nvme0n1";
|
||||
};
|
||||
}
|
31
machines/dolomite/secrets/la-00.yaml
Normal file
31
machines/dolomite/secrets/la-00.yaml
Normal file
|
@ -0,0 +1,31 @@
|
|||
wg_private_key: ENC[AES256_GCM,data:jz/03kP/dj625Jweu0MEw9aGm3Z3M1f43cZqGy2eElCIDhD78n+zZAqOM8c=,iv:fZxuvZLx97YyDoafQXbqVYjqRYzZq90PJiri9vdjwro=,tag:0A9sGnSl3y3gpEuvsdRtGg==,type:str]
|
||||
wg_ipv6_local_addr: ENC[AES256_GCM,data:W/uR+9kAKdXViAbZ0vEhC2eNwlzqX0x+LpzLrLCmQuVgRbZAtJCqfeE=,iv:pMZumU7fMV5MYX59hO7SEMLlG4m8DdPXeAiNgLxNzZk=,tag:xdGBpOBdWlc8Q9BDMv04sA==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1uw059wcwfvd9xuj0hpqzqpeg7qemecspjrsatg37wc7rs2pumfdsgken0c
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4WjRVY3BKdVU1WERrVzla
|
||||
L1NNYWp2SFZEaW84b0h1clFGRHVmRDhnM3o0CkUrZjZKNHp2TGtrTXpyOHNVckJw
|
||||
VURjOEVaR3VQU1pJY2NaOFBQRjVIdWcKLS0tIFBQRWRnNnk4aWxsQVhhdUdVWWpy
|
||||
aG9Oa3lOY0JjY2tFU3ZTazcyZW5SM0kKRfTrM65aI5LMOHoGsls3PWChrY5pEz91
|
||||
EERpRd552+PxYBKvumI59mtdlD263d5kmlTxIIZXTOJ2fcl1bii2bg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1fw2sqaa5s9c8ml6ncsexkj8ar4288387ju92ytjys4awf9aw6smqqz94dh
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTdzk4ajV5ekNpZXNGTHdD
|
||||
aVBLZDlSbzE1aG5LT0cvVVVlVDBNOWtackNVCjVnZDhYZmFoT21DZHNYT2pMVDF6
|
||||
ZW5UY1ZFRFdtbDdPZHZIWUVuWjhJMk0KLS0tIGR4UUYwcjJtZUFYYlJSS2d6Q3hZ
|
||||
WVJYSWhOaTEvNUdYTXV6OThPenJaY0UKv3WK6gacUxO6PFklkW+jDMG5FgIUuEvN
|
||||
RvvI9ZXRD4QwKW1mpVrxbC+fRqlKawyyyyikvHFGJvpts4/88IcgUQ==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2024-04-15T11:37:57Z"
|
||||
mac: ENC[AES256_GCM,data:iCgvJMijsUjdBT9hMQx4owYkbp2nV1jORB5HGtz5IPHgI9A5FXAAPFtaSGgQSI3twSkYMU94NULjumCyyWt3syH5KK9itHgHwONyVFieyXLiWozqpN2Z0SA5G4SnK3E6X273br9gwNAj33I2MdS/3K8b4EOO2yEzilWmrW7f3rk=,iv:UD7uHrtq4O6+EsWFrjegTXHtQUFcnhKsu4J0e0srDtk=,tag:b0eJEeUJPwi4+rDPeBY7oA==,type:str]
|
||||
pgp: []
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.8.1
|
|
@ -3,62 +3,139 @@ with lib;
|
|||
|
||||
let
|
||||
cfg = config.custom-hm.vscode;
|
||||
|
||||
packages = {
|
||||
nixPackages = {
|
||||
systemPackages = with pkgs; [ nixd nixpkgs-fmt ];
|
||||
extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
|
||||
jnoortheen.nix-ide
|
||||
];
|
||||
settings = {
|
||||
"nix.enableLanguageServer" = true;
|
||||
"nix.formatterPath" = "nixpkgs-fmt";
|
||||
"nix.serverPath" = "nixd";
|
||||
};
|
||||
};
|
||||
cxxPackages = {
|
||||
systemPackages = with pkgs; [ clang-tools ];
|
||||
extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
|
||||
llvm-vs-code-extensions.vscode-clangd
|
||||
(ms-vscode.cmake-tools.overrideAttrs (_: { sourceRoot = "extension"; }))
|
||||
twxs.cmake
|
||||
];
|
||||
settings = {
|
||||
"cmake.configureOnEdit" = false;
|
||||
"cmake.showOptionsMovedNotification" = false;
|
||||
"cmake.showNotAllDocumentsSavedQuestion" = false;
|
||||
};
|
||||
};
|
||||
pythonPackages = {
|
||||
systemPackages = with pkgs; [ ];
|
||||
extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
|
||||
ms-python.python
|
||||
];
|
||||
settings = { };
|
||||
};
|
||||
scalaPackages = {
|
||||
systemPackages = with pkgs; [ ];
|
||||
extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
|
||||
scala-lang.scala
|
||||
scalameta.metals
|
||||
];
|
||||
settings = { };
|
||||
};
|
||||
latexPackages = {
|
||||
systemPackages = with pkgs; [ texliveSmall ];
|
||||
extension = with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
|
||||
james-yu.latex-workshop
|
||||
];
|
||||
settings = {
|
||||
"latex-workshop.latex.autoBuild.run" = "never";
|
||||
"latex-workshop.latex.tools" = [
|
||||
{ "name" = "xelatex";
|
||||
"command" = "xelatex";
|
||||
"args" = [ "-synctex=1" "-interaction=nonstopmode" "-file-line-error" "-pdf" "%DOCFILE%" ];
|
||||
}
|
||||
{ "name" = "pdflatex";
|
||||
"command" = "pdflatex";
|
||||
"args" = [ "-synctex=1" "-interaction=nonstopmode" "-file-line-error" "%DOCFILE%" ];
|
||||
}
|
||||
{ "name" = "bibtex"; "command" = "bibtex"; "args" = [ "%DOCFILE%" ]; }
|
||||
];
|
||||
"latex-workshop.latex.recipes" = [
|
||||
{ "name" = "xelatex"; "tools" = [ "xelatex" ]; }
|
||||
{ "name" = "pdflatex"; "tools" = [ "pdflatex" ]; }
|
||||
{ "name" = "xe->bib->xe->xe"; "tools" = [ "xelatex" "bibtex" "xelatex" "xelatex" ]; }
|
||||
{ "name" = "pdf->bib->pdf->pdf"; "tools" = [ "pdflatex" "bibtex" "pdflatex" "pdflatex" ]; }
|
||||
];
|
||||
"[latex]" = {
|
||||
"editor.formatOnPaste" = false;
|
||||
"editor.suggestSelection" = "recentlyusedbyprefix";
|
||||
"editor.wordWrap" = "bounded";
|
||||
"editor.wordWrapColumn" = 80;
|
||||
"editor.unicodeHighlight.ambiguousCharacters" = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
languages = [ "nix" "cxx" "python" "scala" "latex" ];
|
||||
zipAttrsWithLanguageOption = (attr:
|
||||
(map (l: (lib.mkIf cfg.languages.${l} packages."${l}Packages".${attr})) languages)
|
||||
);
|
||||
in
|
||||
{
|
||||
options.custom-hm.vscode = {
|
||||
enable = mkEnableOption "Vscode config";
|
||||
languages = {
|
||||
nix = mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
};
|
||||
cxx = mkEnableOption "C++";
|
||||
python = mkEnableOption "Python";
|
||||
scala = mkEnableOption "Scala";
|
||||
latex = mkEnableOption "Latex";
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
pkgs.wl-clipboard-x11
|
||||
];
|
||||
home.packages = lib.mkMerge ([
|
||||
[ pkgs.clang-tools ]
|
||||
] ++ zipAttrsWithLanguageOption "systemPackages");
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
enableUpdateCheck = false;
|
||||
enableExtensionUpdateCheck = false;
|
||||
mutableExtensionsDir = false;
|
||||
extensions = (with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
|
||||
extensions = lib.mkMerge ([
|
||||
(with inputs.nix-vscode-extensions.extensions.${pkgs.system}.vscode-marketplace; [
|
||||
mkhl.direnv
|
||||
|
||||
bbenoist.nix
|
||||
ms-azuretools.vscode-docker
|
||||
ms-vscode-remote.remote-ssh
|
||||
vscodevim.vim
|
||||
github.vscode-pull-request-github
|
||||
gruntfuggly.todo-tree # todo highlight
|
||||
|
||||
# Language support
|
||||
# Python
|
||||
ms-python.python
|
||||
# Markdown
|
||||
davidanson.vscode-markdownlint
|
||||
# C/C++
|
||||
llvm-vs-code-extensions.vscode-clangd
|
||||
# Nix
|
||||
jnoortheen.nix-ide
|
||||
# Latex
|
||||
james-yu.latex-workshop
|
||||
# Vue
|
||||
vue.volar
|
||||
# Scale / chisel
|
||||
scala-lang.scala
|
||||
scalameta.metals
|
||||
|
||||
(ms-vscode.cmake-tools.overrideAttrs (_: { sourceRoot = "extension"; }))
|
||||
twxs.cmake
|
||||
|
||||
sterben.fpga-support
|
||||
|
||||
ms-vscode-remote.remote-ssh-edit
|
||||
mushan.vscode-paste-image
|
||||
]) ++ (with pkgs.vscode-extensions; [
|
||||
])
|
||||
(with pkgs.vscode-extensions; [
|
||||
waderyan.gitblame
|
||||
catppuccin.catppuccin-vsc
|
||||
# Rust
|
||||
rust-lang.rust-analyzer
|
||||
]);
|
||||
userSettings = {
|
||||
"workbench.colorTheme" = "Catppuccin Macchiato";
|
||||
# ]) ++ ;
|
||||
])
|
||||
] ++ zipAttrsWithLanguageOption "extension");
|
||||
userSettings = lib.mkMerge ([
|
||||
{"workbench.colorTheme" = "Catppuccin Macchiato";
|
||||
"terminal.integrated.sendKeybindingsToShell" = true;
|
||||
"extensions.ignoreRecommendations" = true;
|
||||
"files.autoSave" = "afterDelay";
|
||||
|
@ -70,80 +147,10 @@ in
|
|||
"git.autofetch" = false;
|
||||
"window.zoomLevel" = -1;
|
||||
|
||||
"nix.enableLanguageServer" = true;
|
||||
|
||||
"latex-workshop.latex.autoBuild.run" = "never";
|
||||
"latex-workshop.latex.tools" = [
|
||||
{
|
||||
"name" = "xelatex";
|
||||
"command" = "xelatex";
|
||||
"args" = [
|
||||
"-synctex=1"
|
||||
"-interaction=nonstopmode"
|
||||
"-file-line-error"
|
||||
"-pdf"
|
||||
"%DOCFILE%"
|
||||
];
|
||||
}
|
||||
{
|
||||
"name" = "pdflatex";
|
||||
"command" = "pdflatex";
|
||||
"args" = [
|
||||
"-synctex=1"
|
||||
"-interaction=nonstopmode"
|
||||
"-file-line-error"
|
||||
"%DOCFILE%"
|
||||
];
|
||||
}
|
||||
{
|
||||
"name" = "bibtex";
|
||||
"command" = "bibtex";
|
||||
"args" = [
|
||||
"%DOCFILE%"
|
||||
];
|
||||
}
|
||||
];
|
||||
"latex-workshop.latex.recipes" = [
|
||||
{
|
||||
"name" = "xelatex";
|
||||
"tools" = [
|
||||
"xelatex"
|
||||
];
|
||||
}
|
||||
{
|
||||
"name" = "pdflatex";
|
||||
"tools" = [
|
||||
"pdflatex"
|
||||
];
|
||||
}
|
||||
{
|
||||
"name" = "xe->bib->xe->xe";
|
||||
"tools" = [
|
||||
"xelatex"
|
||||
"bibtex"
|
||||
"xelatex"
|
||||
"xelatex"
|
||||
];
|
||||
}
|
||||
{
|
||||
"name" = "pdf->bib->pdf->pdf";
|
||||
"tools" = [
|
||||
"pdflatex"
|
||||
"bibtex"
|
||||
"pdflatex"
|
||||
"pdflatex"
|
||||
];
|
||||
}
|
||||
];
|
||||
"[latex]" = {
|
||||
"editor.formatOnPaste" = false;
|
||||
"editor.suggestSelection" = "recentlyusedbyprefix";
|
||||
"editor.wordWrap" = "bounded";
|
||||
"editor.wordWrapColumn" = 80;
|
||||
"editor.unicodeHighlight.ambiguousCharacters" = false;
|
||||
};
|
||||
"cmake.configureOnEdit" = false;
|
||||
"extensions.experimental.affinity" = {
|
||||
"vscodevim.vim" = 1;
|
||||
};
|
||||
}] ++ zipAttrsWithLanguageOption "settings");
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -40,6 +40,8 @@
|
|||
|
||||
"https://nix-community.cachix.org"
|
||||
];
|
||||
accept-flake-config = "true";
|
||||
log-lines = "300";
|
||||
trusted-public-keys = [
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
{
|
||||
nixpkgs.overlays = [
|
||||
(self: super: {
|
||||
ssh-tpm-agent =
|
||||
pkgs.callPackage ./pkgs/ssh-tpm-agent.nix { };
|
||||
ssh-tpm-agent = pkgs.callPackage ./pkgs/ssh-tpm-agent.nix { };
|
||||
wechat-uos = pkgs.callPackage ./pkgs/wechat-uos.nix { };
|
||||
})
|
||||
];
|
||||
}
|
||||
|
|
239
overlays/pkgs/wechat-uos.nix
Normal file
239
overlays/pkgs/wechat-uos.nix
Normal file
|
@ -0,0 +1,239 @@
|
|||
{ stdenvNoCC
|
||||
, stdenv
|
||||
, lib
|
||||
, fetchurl
|
||||
, requireFile
|
||||
, dpkg
|
||||
, nss
|
||||
, nspr
|
||||
, xorg
|
||||
, pango
|
||||
, zlib
|
||||
, atkmm
|
||||
, libdrm
|
||||
, libxkbcommon
|
||||
, xcbutilwm
|
||||
, xcbutilimage
|
||||
, xcbutilkeysyms
|
||||
, xcbutilrenderutil
|
||||
, mesa
|
||||
, alsa-lib
|
||||
, wayland
|
||||
, openssl_1_1
|
||||
, atk
|
||||
, qt6
|
||||
, at-spi2-atk
|
||||
, at-spi2-core
|
||||
, dbus
|
||||
, cups
|
||||
, gtk3
|
||||
, libxml2
|
||||
, cairo
|
||||
, freetype
|
||||
, fontconfig
|
||||
, vulkan-loader
|
||||
, gdk-pixbuf
|
||||
, libexif
|
||||
, ffmpeg
|
||||
, pulseaudio
|
||||
, systemd
|
||||
, libuuid
|
||||
, expat
|
||||
, bzip2
|
||||
, glib
|
||||
, libva
|
||||
, libGL
|
||||
, libnotify
|
||||
, buildFHSEnv
|
||||
, writeShellScript
|
||||
, /**
|
||||
License for wechat-uos, packed in a gz archive named "license.tar.gz".
|
||||
It should have the following files:
|
||||
license.tar.gz
|
||||
├── etc
|
||||
│ ├── lsb-release
|
||||
│ └── os-release
|
||||
└── var
|
||||
├── lib
|
||||
│ └── uos-license
|
||||
│ └── .license.json
|
||||
└── uos
|
||||
└── .license.key
|
||||
*/
|
||||
uosLicense ? requireFile {
|
||||
name = "license.tar.gz";
|
||||
url = "https://www.uniontech.com";
|
||||
sha256 = "53760079c1a5b58f2fa3d5effe1ed35239590b288841d812229ef4e55b2dbd69";
|
||||
}
|
||||
}:
|
||||
let
|
||||
wechat-uos-env = stdenvNoCC.mkDerivation {
|
||||
meta.priority = 1;
|
||||
name = "wechat-uos-env";
|
||||
buildCommand = ''
|
||||
mkdir -p $out/etc
|
||||
mkdir -p $out/lib/license
|
||||
mkdir -p $out/usr/bin
|
||||
mkdir -p $out/usr/share
|
||||
mkdir -p $out/opt
|
||||
mkdir -p $out/var
|
||||
ln -s ${wechat}/opt/* $out/opt/
|
||||
ln -s ${wechat}/usr/lib/wechat-uos/license/etc/os-release $out/etc/os-release
|
||||
ln -s ${wechat}/usr/lib/wechat-uos/license/etc/lsb-release $out/etc/lsb-release
|
||||
ln -s ${wechat}/usr/lib/wechat-uos/license/var/* $out/var/
|
||||
ln -s ${wechat}/usr/lib/wechat-uos/license/libuosdevicea.so $out/lib/license/
|
||||
'';
|
||||
preferLocalBuild = true;
|
||||
};
|
||||
|
||||
wechat-uos-runtime = with xorg; [
|
||||
stdenv.cc.cc
|
||||
stdenv.cc.libc
|
||||
pango
|
||||
zlib
|
||||
xcbutilwm
|
||||
xcbutilimage
|
||||
xcbutilkeysyms
|
||||
xcbutilrenderutil
|
||||
libX11
|
||||
libXt
|
||||
libXext
|
||||
libSM
|
||||
libICE
|
||||
libxcb
|
||||
libxkbcommon
|
||||
libxshmfence
|
||||
libXi
|
||||
libXft
|
||||
libXcursor
|
||||
libXfixes
|
||||
libXScrnSaver
|
||||
libXcomposite
|
||||
libXdamage
|
||||
libXtst
|
||||
libXrandr
|
||||
libnotify
|
||||
atk
|
||||
atkmm
|
||||
cairo
|
||||
at-spi2-atk
|
||||
at-spi2-core
|
||||
alsa-lib
|
||||
dbus
|
||||
cups
|
||||
gtk3
|
||||
gdk-pixbuf
|
||||
libexif
|
||||
ffmpeg
|
||||
libva
|
||||
freetype
|
||||
fontconfig
|
||||
libXrender
|
||||
libuuid
|
||||
expat
|
||||
glib
|
||||
nss
|
||||
nspr
|
||||
libGL
|
||||
libxml2
|
||||
pango
|
||||
libdrm
|
||||
mesa
|
||||
vulkan-loader
|
||||
systemd
|
||||
wayland
|
||||
pulseaudio
|
||||
qt6.qt5compat
|
||||
openssl_1_1
|
||||
bzip2
|
||||
];
|
||||
|
||||
wechat = stdenvNoCC.mkDerivation
|
||||
rec {
|
||||
pname = "wechat-uos";
|
||||
version = "1.0.0.238";
|
||||
|
||||
src = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://pro-store-packages.uniontech.com/appstore/pool/appstore/c/com.tencent.wechat/com.tencent.wechat_${version}_amd64.deb";
|
||||
hash = "sha256-NxAmZ526JaAzAjtAd9xScFnZBuwD6i2wX2/AEqtAyWs=";
|
||||
};
|
||||
aarch64-linux = fetchurl {
|
||||
url = "https://pro-store-packages.uniontech.com/appstore/pool/appstore/c/com.tencent.wechat/com.tencent.wechat_${version}_arm64.deb";
|
||||
hash = "sha256-3ru6KyBYXiuAlZuWhyyvtQCWbOJhGYzker3FS0788RE=";
|
||||
};
|
||||
loongarch64-linux = fetchurl {
|
||||
url = "https://pro-store-packages.uniontech.com/appstore/pool/appstore/c/com.tencent.wechat/com.tencent.wechat_${version}_loongarch64.deb";
|
||||
hash = "sha256-iuJeLMKD6v8J8iKw3+cyODN7PZQrLpi9p0//mkI0ujE=";
|
||||
};
|
||||
}.${stdenv.system} or (throw "${pname}-${version}: ${stdenv.system} is unsupported.");
|
||||
|
||||
# Don't blame about this. WeChat requires some binary from here to work properly
|
||||
uosSrc = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://pro-store-packages.uniontech.com/appstore/pool/appstore/c/com.tencent.weixin/com.tencent.weixin_2.1.5_amd64.deb";
|
||||
hash = "sha256-vVN7w+oPXNTMJ/g1Rpw/AVLIytMXI+gLieNuddyyIYE=";
|
||||
};
|
||||
aarch64-linux = fetchurl {
|
||||
url = "https://pro-store-packages.uniontech.com/appstore/pool/appstore/c/com.tencent.weixin/com.tencent.weixin_2.1.5_arm64.deb";
|
||||
hash = "sha256-XvGFPYJlsYPqRyDycrBGzQdXn/5Da1AJP5LgRVY1pzI=";
|
||||
};
|
||||
loongarch64-linux = fetchurl {
|
||||
url = "https://pro-store-packages.uniontech.com/appstore/pool/appstore/c/com.tencent.weixin/com.tencent.weixin_2.1.5_loongarch64.deb";
|
||||
hash = "sha256-oa6rLE6QXMCPlbebto9Tv7xT3fFqYIlXL6WHpB2U35s=";
|
||||
};
|
||||
}.${stdenv.system} or (throw "${pname}-${version}: ${stdenv.system} is unsupported.");
|
||||
|
||||
inherit uosLicense;
|
||||
|
||||
nativeBuildInputs = [ dpkg ];
|
||||
|
||||
unpackPhase = ''
|
||||
runHook preUnpack
|
||||
dpkg -x $src ./wechat-uos
|
||||
dpkg -x $uosSrc ./wechat-uos-old-source
|
||||
tar -xvf $uosLicense
|
||||
runHook postUnpack
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out
|
||||
cp -r wechat-uos/* $out
|
||||
mkdir -pv $out/usr/lib/wechat-uos/license
|
||||
cp -r license/* $out/usr/lib/wechat-uos/license
|
||||
cp -r wechat-uos-old-source/usr/lib/license/libuosdevicea.so $out/usr/lib/wechat-uos/license/
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Messaging app";
|
||||
homepage = "https://weixin.qq.com/";
|
||||
license = licenses.unfree;
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" "loongarch64-linux" ];
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
maintainers = with maintainers; [ pokon548 ];
|
||||
mainProgram = "wechat-uos";
|
||||
};
|
||||
};
|
||||
in
|
||||
buildFHSEnv {
|
||||
inherit (wechat) name meta;
|
||||
runScript = writeShellScript "wechat-uos-launcher" ''
|
||||
export QT_QPA_PLATFORM=xcb
|
||||
export LD_LIBRARY_PATH=${lib.makeLibraryPath wechat-uos-runtime}
|
||||
${wechat.outPath}/opt/apps/com.tencent.wechat/files/wechat
|
||||
'';
|
||||
extraInstallCommands = ''
|
||||
mkdir -p $out/share/applications
|
||||
mkdir -p $out/share/icons
|
||||
cp -r ${wechat.outPath}/opt/apps/com.tencent.wechat/entries/applications/com.tencent.wechat.desktop $out/share/applications
|
||||
cp -r ${wechat.outPath}/opt/apps/com.tencent.wechat/entries/icons/* $out/share/icons/
|
||||
mv $out/bin/$name $out/bin/wechat-uos
|
||||
substituteInPlace $out/share/applications/com.tencent.wechat.desktop \
|
||||
--replace-quiet 'Exec=/usr/bin/wechat' "Exec=$out/bin/wechat-uos --"
|
||||
'';
|
||||
targetPkgs = pkgs: [ wechat-uos-env ];
|
||||
|
||||
extraOutputsToInstall = [ "usr" "var/lib/uos" "var/uos" "etc" ];
|
||||
}
|
Loading…
Reference in a new issue