mirror of https://github.com/wlcx/home.git
Compare commits
3 Commits
8eef537cba
...
74b11aead4
Author | SHA1 | Date |
---|---|---|
Sam W | 74b11aead4 | |
Sam W | 9d17d0b0be | |
Sam W | d173f84fc0 |
46
flake.lock
46
flake.lock
|
@ -10,11 +10,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1654858401,
|
"lastModified": 1667210711,
|
||||||
"narHash": "sha256-53bw34DtVJ2bnF6WEwy6Tym+qY0pNEiEwARUlvmTZjs=",
|
"narHash": "sha256-IoErjXZAkzYWHEpQqwu/DeRNJGFdR7X2OGbkhMqMrpw=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "devshell",
|
"repo": "devshell",
|
||||||
"rev": "f55e05c6d3bbe9acc7363bc8fc739518b2f02976",
|
"rev": "96a9dd12b8a447840cc246e17a47b81a4268bba7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -25,11 +25,11 @@
|
||||||
},
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1653893745,
|
"lastModified": 1667395993,
|
||||||
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=",
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1",
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -42,35 +42,36 @@
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
],
|
||||||
|
"utils": "utils"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1654113405,
|
"lastModified": 1670253003,
|
||||||
"narHash": "sha256-VpK+0QaWG2JRgB00lw77N9TjkE3ec0iMYIX1TzGpxa4=",
|
"narHash": "sha256-/tJIy4+FbsQyslq1ipyicZ2psOEd8dvl4OJ9lfisjd0=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "ac2287df5a2d6f0a44bbcbd11701dbbf6ec43675",
|
"rev": "0e8125916b420e41bf0d23a0aa33fadd0328beb3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"ref": "release-22.05",
|
"ref": "release-22.11",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1662874738,
|
"lastModified": 1671040593,
|
||||||
"narHash": "sha256-kG29aU9f5UTWhPf/QEh5LanDmqqbbcErWYAcPptC/Cg=",
|
"narHash": "sha256-W5aZNwYBjaEaLifDWGEfecvnCiDkXjI26rHgidSftUM=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "dd1f4d982445a7d1b1869baa42f8f0f9bc606714",
|
"rev": "170e39462b516bd1475ce9184f7bb93106d27c59",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-22.05",
|
"ref": "nixos-22.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
@ -82,6 +83,21 @@
|
||||||
"home-manager": "home-manager",
|
"home-manager": "home-manager",
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|
26
flake.nix
26
flake.nix
|
@ -2,10 +2,10 @@
|
||||||
description = "Samw's home environment, as managed by nix/home-manager.";
|
description = "Samw's home environment, as managed by nix/home-manager.";
|
||||||
inputs = {
|
inputs = {
|
||||||
# Nixpkgs
|
# Nixpkgs
|
||||||
nixpkgs = {url = "github:nixos/nixpkgs/nixos-22.05";};
|
nixpkgs = {url = "github:nixos/nixpkgs/nixos-22.11";};
|
||||||
# Other modules
|
# Other modules
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/release-22.05";
|
url = "github:nix-community/home-manager/release-22.11";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
@ -21,8 +21,6 @@
|
||||||
(final: prev: rec {
|
(final: prev: rec {
|
||||||
# Make my local packages available as pkgs.mypkgs.<foo>
|
# Make my local packages available as pkgs.mypkgs.<foo>
|
||||||
mypkgs = prev.callPackage ./pkgs {};
|
mypkgs = prev.callPackage ./pkgs {};
|
||||||
# Directly override yubikey-manager
|
|
||||||
yubikey-manager = mypkgs.yubikey-manager;
|
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
in (rec {
|
in (rec {
|
||||||
|
@ -34,17 +32,17 @@
|
||||||
username ? "samw",
|
username ? "samw",
|
||||||
}:
|
}:
|
||||||
inputs.home-manager.lib.homeManagerConfiguration {
|
inputs.home-manager.lib.homeManagerConfiguration {
|
||||||
inherit username system;
|
pkgs = inputs.nixpkgs.legacyPackages.${system};
|
||||||
stateVersion = "21.11";
|
modules = [
|
||||||
homeDirectory =
|
{ home = {
|
||||||
if (inputs.nixpkgs.lib.systems.elaborate system).isDarwin
|
inherit username;
|
||||||
then "/Users/${username}"
|
homeDirectory =
|
||||||
else "/home/${username}";
|
if (inputs.nixpkgs.lib.systems.elaborate system).isDarwin
|
||||||
# In home-manager 22.11 configuration/extraModules go away and are replaced
|
then "/Users/${username}"
|
||||||
# by a single "modules". So let's get ready for that.
|
else "/home/${username}";
|
||||||
configuration = {...}: {};
|
stateVersion = "21.11";
|
||||||
|
};}] ++ profiles ++ [{nixpkgs.overlays = overlays;}];
|
||||||
extraSpecialArgs = {inherit system;};
|
extraSpecialArgs = {inherit system;};
|
||||||
extraModules = profiles ++ [{nixpkgs.overlays = overlays;}];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,12 @@ in {
|
||||||
[
|
[
|
||||||
# More fancy shit
|
# More fancy shit
|
||||||
nvim-treesitter
|
nvim-treesitter
|
||||||
# Language stuff
|
|
||||||
nvim-lspconfig
|
|
||||||
trouble-nvim
|
trouble-nvim
|
||||||
|
# Language server/completions
|
||||||
|
nvim-lspconfig
|
||||||
|
nvim-cmp
|
||||||
|
cmp-nvim-lsp
|
||||||
|
# Language specific
|
||||||
rust-vim
|
rust-vim
|
||||||
vim-terraform
|
vim-terraform
|
||||||
vim-protobuf
|
vim-protobuf
|
||||||
|
|
|
@ -9,12 +9,35 @@ local on_attach = function(client, bufnr)
|
||||||
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
|
vim.api.nvim_buf_set_keymap(bufnr, 'n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Enable Language LSPs
|
-- Completion
|
||||||
|
local cmp = require'cmp'
|
||||||
|
cmp.setup({
|
||||||
|
window = {
|
||||||
|
-- completion = cmp.config.window.bordered(),
|
||||||
|
-- documentation = cmp.config.window.bordered(),
|
||||||
|
},
|
||||||
|
mapping = cmp.mapping.preset.insert({
|
||||||
|
['<C-Space>'] = cmp.mapping.complete(),
|
||||||
|
['<C-e>'] = cmp.mapping.abort(),
|
||||||
|
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
||||||
|
}),
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
}),
|
||||||
|
}, {
|
||||||
|
{ name = 'buffer' },
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Language servers
|
||||||
|
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
||||||
|
|
||||||
require'lspconfig'.gopls.setup{
|
require'lspconfig'.gopls.setup{
|
||||||
on_attach = on_attach,
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
}
|
}
|
||||||
require'lspconfig'.pylsp.setup{
|
require'lspconfig'.pylsp.setup{
|
||||||
on_attach = on_attach,
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
handlers = {
|
handlers = {
|
||||||
["textDocument/publishDiagnostics"] = vim.lsp.with(
|
["textDocument/publishDiagnostics"] = vim.lsp.with(
|
||||||
vim.lsp.diagnostic.on_publish_diagnostics, {
|
vim.lsp.diagnostic.on_publish_diagnostics, {
|
||||||
|
@ -25,21 +48,26 @@ require'lspconfig'.pylsp.setup{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
require'lspconfig'.rnix.setup{
|
require'lspconfig'.rnix.setup{
|
||||||
on_attach = on_attach
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
}
|
}
|
||||||
require'lspconfig'.rust_analyzer.setup{
|
require'lspconfig'.rust_analyzer.setup{
|
||||||
on_attach = on_attach
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
}
|
}
|
||||||
require'lspconfig'.dhall_lsp_server.setup{
|
require'lspconfig'.dhall_lsp_server.setup{
|
||||||
on_attach = on_attach
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
}
|
}
|
||||||
require'lspconfig'.eslint.setup{
|
require'lspconfig'.eslint.setup{
|
||||||
on_attach = on_attach
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
}
|
}
|
||||||
-- Configure volar (vuejs language server stuff) in "takeover" mode
|
-- Configure volar (vuejs language server stuff) in "takeover" mode
|
||||||
require'lspconfig'.volar.setup{
|
require'lspconfig'.volar.setup{
|
||||||
|
on_attach = on_attach,
|
||||||
|
capabilities = capabilities,
|
||||||
filetypes = {'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue', 'json'},
|
filetypes = {'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue', 'json'},
|
||||||
on_attach = on_attach
|
|
||||||
}
|
}
|
||||||
--[[ If we didn't have takeover mode enabled above, we'd want this
|
--[[ If we didn't have takeover mode enabled above, we'd want this
|
||||||
require'lspconfig'.tsserver.setup{
|
require'lspconfig'.tsserver.setup{
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
# TODO: auto import everything
|
# TODO: auto import everything
|
||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
qrclip = pkgs.callPackage ./qrclip {};
|
qrclip = pkgs.callPackage ./qrclip {};
|
||||||
zbar = pkgs.callPackage ./zbar {};
|
|
||||||
yubikey-manager = pkgs.callPackage ./yubikey-manager {};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
lib,
|
lib,
|
||||||
stdenv,
|
stdenv,
|
||||||
}: let
|
}: let
|
||||||
zbar = pkgs.mypkgs.zbar.override {enableVideo = false;};
|
zbar = pkgs.zbar.override {enableVideo = false;};
|
||||||
in
|
in
|
||||||
(pkgs.writeShellScriptBin "qrclip" ''
|
(pkgs.writeShellScriptBin "qrclip" ''
|
||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
{
|
|
||||||
python3Packages,
|
|
||||||
fetchFromGitHub,
|
|
||||||
lib,
|
|
||||||
yubikey-personalization,
|
|
||||||
libu2f-host,
|
|
||||||
libusb1,
|
|
||||||
procps,
|
|
||||||
}:
|
|
||||||
python3Packages.buildPythonPackage rec {
|
|
||||||
pname = "yubikey-manager";
|
|
||||||
version = "4.0.8";
|
|
||||||
format = "pyproject";
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
repo = "yubikey-manager";
|
|
||||||
rev = version;
|
|
||||||
owner = "Yubico";
|
|
||||||
sha256 = "sha256-OszXOu/NhoX4WutsT4Z1LsY54KTOWRKt13yDo2fzDbA=";
|
|
||||||
};
|
|
||||||
|
|
||||||
patches = [./lol.patch];
|
|
||||||
doCheck = false;
|
|
||||||
|
|
||||||
postPatch = ''
|
|
||||||
substituteInPlace pyproject.toml \
|
|
||||||
--replace 'cryptography = "^2.1 || ^3.0"' 'cryptography = "*"'
|
|
||||||
substituteInPlace "ykman/pcsc/__init__.py" \
|
|
||||||
--replace 'pkill' '${procps}/bin/pkill'
|
|
||||||
'';
|
|
||||||
|
|
||||||
nativeBuildInputs = with python3Packages; [poetry-core];
|
|
||||||
|
|
||||||
propagatedBuildInputs = with python3Packages;
|
|
||||||
[
|
|
||||||
click
|
|
||||||
cryptography
|
|
||||||
pyscard
|
|
||||||
pyusb
|
|
||||||
six
|
|
||||||
fido2
|
|
||||||
]
|
|
||||||
++ [
|
|
||||||
libu2f-host
|
|
||||||
libusb1
|
|
||||||
yubikey-personalization
|
|
||||||
];
|
|
||||||
|
|
||||||
makeWrapperArgs = [
|
|
||||||
"--prefix"
|
|
||||||
"LD_LIBRARY_PATH"
|
|
||||||
":"
|
|
||||||
(lib.makeLibraryPath [libu2f-host libusb1 yubikey-personalization])
|
|
||||||
];
|
|
||||||
|
|
||||||
postInstall = ''
|
|
||||||
mkdir -p "$out/man/man1"
|
|
||||||
cp man/ykman.1 "$out/man/man1"
|
|
||||||
|
|
||||||
mkdir -p $out/share/bash-completion/completions
|
|
||||||
_YKMAN_COMPLETE=source $out/bin/ykman > $out/share/bash-completion/completions/ykman || :
|
|
||||||
mkdir -p $out/share/zsh/site-functions/
|
|
||||||
_YKMAN_COMPLETE=source_zsh "$out/bin/ykman" > "$out/share/zsh/site-functions/_ykman" || :
|
|
||||||
substituteInPlace "$out/share/zsh/site-functions/_ykman" \
|
|
||||||
--replace 'compdef _ykman_completion ykman;' '_ykman_completion "$@"'
|
|
||||||
'';
|
|
||||||
|
|
||||||
checkInputs = with python3Packages; [pytestCheckHook makefun];
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
homepage = "https://developers.yubico.com/yubikey-manager";
|
|
||||||
description = "Command line tool for configuring any YubiKey over all USB transports";
|
|
||||||
|
|
||||||
license = licenses.bsd2;
|
|
||||||
platforms = platforms.unix;
|
|
||||||
maintainers = with maintainers; [benley lassulus pinpox];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
diff --git a/pyproject.toml b/pyproject.toml
|
|
||||||
index 7544201..9caa5c6 100644
|
|
||||||
--- a/pyproject.toml
|
|
||||||
+++ b/pyproject.toml
|
|
||||||
@@ -30,7 +30,6 @@ packages = [
|
|
||||||
python = "^3.6"
|
|
||||||
dataclasses = {version = "^0.8", python = "<3.7"}
|
|
||||||
cryptography = ">=2.1, <39"
|
|
||||||
-pyOpenSSL = {version = ">=0.15.1", optional = true}
|
|
||||||
pyscard = "^1.9 || ^2.0"
|
|
||||||
fido2 = ">=0.9, <1.0"
|
|
||||||
click = "^6.0 || ^7.0 || ^8.0"
|
|
|
@ -1,94 +0,0 @@
|
||||||
{
|
|
||||||
stdenv,
|
|
||||||
lib,
|
|
||||||
fetchFromGitHub,
|
|
||||||
imagemagickBig,
|
|
||||||
pkg-config,
|
|
||||||
libX11,
|
|
||||||
libv4l,
|
|
||||||
libiconv,
|
|
||||||
qtbase ? null,
|
|
||||||
darwin,
|
|
||||||
qtx11extras ? null,
|
|
||||||
wrapQtAppsHook ? null,
|
|
||||||
wrapGAppsHook,
|
|
||||||
gtk3,
|
|
||||||
xmlto,
|
|
||||||
docbook_xsl,
|
|
||||||
autoreconfHook,
|
|
||||||
dbus,
|
|
||||||
enableVideo ? stdenv.isLinux,
|
|
||||||
# The implementation is buggy and produces an error like
|
|
||||||
# Name Error (Connection ":1.4380" is not allowed to own the service "org.linuxtv.Zbar" due to security policies in the configuration file)
|
|
||||||
# for every scanned code.
|
|
||||||
# see https://github.com/mchehab/zbar/issues/104
|
|
||||||
enableDbus ? false,
|
|
||||||
libintl,
|
|
||||||
}:
|
|
||||||
stdenv.mkDerivation rec {
|
|
||||||
pname = "zbar";
|
|
||||||
version = "0.23.90";
|
|
||||||
|
|
||||||
outputs = ["out" "lib" "dev" "doc" "man"];
|
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
|
||||||
owner = "mchehab";
|
|
||||||
repo = "zbar";
|
|
||||||
rev = version;
|
|
||||||
sha256 = "sha256-FvV7TMc4JbOiRjWLka0IhtpGGqGm5fis7h870OmJw2U=";
|
|
||||||
};
|
|
||||||
|
|
||||||
nativeBuildInputs =
|
|
||||||
[pkg-config xmlto autoreconfHook docbook_xsl] ++ lib.optionals enableVideo [wrapQtAppsHook wrapGAppsHook];
|
|
||||||
|
|
||||||
buildInputs =
|
|
||||||
[imagemagickBig libX11 libintl]
|
|
||||||
++ lib.optionals enableDbus [dbus]
|
|
||||||
++ lib.optionals enableVideo [libv4l gtk3 qtbase qtx11extras]
|
|
||||||
++ lib.optionals stdenv.isDarwin [libiconv darwin.apple_sdk.frameworks.Foundation];
|
|
||||||
|
|
||||||
# Disable assertions which include -dev QtBase file paths.
|
|
||||||
NIX_CFLAGS_COMPILE = "-DQT_NO_DEBUG";
|
|
||||||
|
|
||||||
configureFlags =
|
|
||||||
["--without-python"]
|
|
||||||
++ (
|
|
||||||
if enableDbus
|
|
||||||
then ["--with-dbusconfdir=${placeholder "out"}/share"]
|
|
||||||
else ["--without-dbus"]
|
|
||||||
)
|
|
||||||
++ (
|
|
||||||
if enableVideo
|
|
||||||
then ["--with-gtk=gtk3"]
|
|
||||||
else [
|
|
||||||
"--disable-video"
|
|
||||||
"--without-gtk"
|
|
||||||
"--without-qt"
|
|
||||||
]
|
|
||||||
);
|
|
||||||
|
|
||||||
dontWrapQtApps = true;
|
|
||||||
dontWrapGApps = true;
|
|
||||||
|
|
||||||
postFixup = lib.optionalString enableVideo ''
|
|
||||||
wrapGApp "$out/bin/zbarcam-gtk"
|
|
||||||
wrapQtApp "$out/bin/zbarcam-qt"
|
|
||||||
'';
|
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
|
||||||
|
|
||||||
meta = with lib; {
|
|
||||||
description = "Bar code reader";
|
|
||||||
longDescription = ''
|
|
||||||
ZBar is an open source software suite for reading bar codes from various
|
|
||||||
sources, such as video streams, image files and raw intensity sensors. It
|
|
||||||
supports many popular symbologies (types of bar codes) including
|
|
||||||
EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 and QR
|
|
||||||
Code.
|
|
||||||
'';
|
|
||||||
maintainers = with maintainers; [delroth raskin];
|
|
||||||
platforms = platforms.unix;
|
|
||||||
license = licenses.lgpl21;
|
|
||||||
homepage = "https://github.com/mchehab/zbar";
|
|
||||||
};
|
|
||||||
}
|
|
Loading…
Reference in New Issue