Compare commits
13 commits
8a0689c52e
...
abf32ff426
Author | SHA1 | Date | |
---|---|---|---|
abf32ff426 | |||
c1e155988d | |||
e69a26f77f | |||
af4e08b5af | |||
c65c53cf73 | |||
a5fb079c06 | |||
0016d20633 | |||
982b0ccc48 | |||
a731e61c09 | |||
3b4c75121a | |||
e556401bac | |||
84ba8bf7cc | |||
05078468af |
14 changed files with 143 additions and 76 deletions
46
flake.lock
generated
46
flake.lock
generated
|
@ -122,11 +122,11 @@
|
||||||
"nixpkgs-stable": "nixpkgs-stable"
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742980632,
|
"lastModified": 1743067111,
|
||||||
"narHash": "sha256-UQRljs0DcUbfmVn90rUtpcuPbyGWHGmxob+WP36r9tg=",
|
"narHash": "sha256-v9VJXx7525gMH6S7WesJM84Dr76jxRubATuBJn4L14o=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "emacs-overlay",
|
"repo": "emacs-overlay",
|
||||||
"rev": "6a1714928534fd6e2c0c68f42507f05d9dba6820",
|
"rev": "5c22a2387d4ac1e1d64d66489e7d3ecb0a30cbcd",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -387,11 +387,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742996658,
|
"lastModified": 1743082807,
|
||||||
"narHash": "sha256-snxgTLVq6ooaD3W3mPHu7LVWpoZKczhxHAUZy2ea4oA=",
|
"narHash": "sha256-qmrCYHVqE6j0TQApfxGx8aRYNdNsqtOrZuH09A+cjTU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "693840c01b9bef9e54100239cef937e53d4661bf",
|
"rev": "171915bfce41018528fda9960211e81946d999b7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -464,11 +464,11 @@
|
||||||
"lix": {
|
"lix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742994059,
|
"lastModified": 1743065774,
|
||||||
"narHash": "sha256-dqT4RrP2yReB0TZr1gQPqoYUS08evAWk1VtjMLuN5MM=",
|
"narHash": "sha256-aC1lwnqwHbYRsPfx+lRi32fHRcln0xhIzf0Q7/Lg+vQ=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "21dac7513cbb65173e825e04b14dadb99d3fc01a",
|
"rev": "b918f1c307b314daa44407bac60046630f13ed48",
|
||||||
"revCount": 17734,
|
"revCount": 17742,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git@git.lix.systems/lix-project/lix"
|
"url": "https://git@git.lix.systems/lix-project/lix"
|
||||||
},
|
},
|
||||||
|
@ -647,11 +647,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742751704,
|
"lastModified": 1742937945,
|
||||||
"narHash": "sha256-rBfc+H1dDBUQ2mgVITMGBPI1PGuCznf9rcWX/XIULyE=",
|
"narHash": "sha256-lWc+79eZRyvHp/SqMhHTMzZVhpxkRvthsP1Qx6UCq0E=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f0946fa5f1fb876a9dc2e1850d9d3a4e3f914092",
|
"rev": "d02d88f8de5b882ccdde0465d8fa2db3aa1169f7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -695,11 +695,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_4": {
|
"nixpkgs_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742669843,
|
"lastModified": 1742889210,
|
||||||
"narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=",
|
"narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1e5b653dff12029333a6546c11e108ede13052eb",
|
"rev": "698214a32beb4f4c8e3942372c694f40848b360d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -726,17 +726,17 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_6": {
|
"nixpkgs_6": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1736701207,
|
"lastModified": 1742889210,
|
||||||
"narHash": "sha256-jG/+MvjVY7SlTakzZ2fJ5dC3V1PrKKrUEOEE30jrOKA=",
|
"narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "ed4a395ea001367c1f13d34b1e01aa10290f67d6",
|
"rev": "698214a32beb4f4c8e3942372c694f40848b360d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "ed4a395ea001367c1f13d34b1e01aa10290f67d6",
|
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -992,11 +992,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1742982148,
|
"lastModified": 1743081648,
|
||||||
"narHash": "sha256-aRA6LSxjlbMI6MmMzi/M5WH/ynd8pK+vACD9za3MKLQ=",
|
"narHash": "sha256-WRAylyYptt6OX5eCEBWyTwOEqEtD6zt33rlUkr6u3cE=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "treefmt-nix",
|
"repo": "treefmt-nix",
|
||||||
"rev": "61c88349bf6dff49fa52d7dfc39b21026c2a8881",
|
"rev": "29a3d7b768c70addce17af0869f6e2bd8f5be4b7",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
flakeParts.url = "github:hercules-ci/flake-parts";
|
flakeParts.url = "github:hercules-ci/flake-parts";
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/ed4a395ea001367c1f13d34b1e01aa10290f67d6"; # FIXME update (check if screen sharing works!)
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
nixosHardware.url = "github:NixOS/nixos-hardware";
|
nixosHardware.url = "github:NixOS/nixos-hardware";
|
||||||
homeManager = {
|
homeManager = {
|
||||||
url = "github:nix-community/home-manager";
|
url = "github:nix-community/home-manager";
|
||||||
|
|
|
@ -548,6 +548,13 @@
|
||||||
(eglot-ensure))))
|
(eglot-ensure))))
|
||||||
:mode "\\.ts\\'")
|
:mode "\\.ts\\'")
|
||||||
|
|
||||||
|
(use-package rust-mode
|
||||||
|
:init
|
||||||
|
(setq rust-mode-treesitter-derive t)
|
||||||
|
:hook ((rust-mode . (lambda ()
|
||||||
|
(require 'eglot)
|
||||||
|
(eglot-ensure)))))
|
||||||
|
|
||||||
(use-package haskell-ts-mode
|
(use-package haskell-ts-mode
|
||||||
:hook ((haskell--ts-mode . eglot-ensure))
|
:hook ((haskell--ts-mode . eglot-ensure))
|
||||||
:mode "\\.hs\\'"
|
:mode "\\.hs\\'"
|
||||||
|
@ -654,7 +661,8 @@
|
||||||
(eat-eshell-mode)
|
(eat-eshell-mode)
|
||||||
(eat-eshell-visual-command-mode)
|
(eat-eshell-visual-command-mode)
|
||||||
:custom ((eshell-prefer-lisp-functions t)
|
:custom ((eshell-prefer-lisp-functions t)
|
||||||
(eshell-history-size 10000))
|
(eshell-history-size 10000)
|
||||||
|
(eshell-banner-message ""))
|
||||||
:config
|
:config
|
||||||
(defun ccr/start-eshell () ;; Used from outside Emacs by emacsclient --eval
|
(defun ccr/start-eshell () ;; Used from outside Emacs by emacsclient --eval
|
||||||
(eshell 'N)
|
(eshell 'N)
|
||||||
|
@ -681,8 +689,10 @@
|
||||||
ccr/eshell-aliases)
|
ccr/eshell-aliases)
|
||||||
|
|
||||||
:bind (("C-c o e" . project-eshell)
|
:bind (("C-c o e" . project-eshell)
|
||||||
:map eshell-mode-map
|
(:map eshell-mode-map
|
||||||
("C-r" . eshell-atuin-history))) ;; i.e. just C-r in semi-char-mode
|
("C-r" . eshell-atuin-history)
|
||||||
|
("C-<return>" . corfu-send)
|
||||||
|
))) ;; i.e. just C-r in semi-char-mode
|
||||||
|
|
||||||
(use-package eshell-command-not-found
|
(use-package eshell-command-not-found
|
||||||
:custom ((eshell-command-not-found-command "command-not-found"))
|
:custom ((eshell-command-not-found-command "command-not-found"))
|
||||||
|
|
|
@ -63,7 +63,7 @@ in
|
||||||
};
|
};
|
||||||
profiles.default = {
|
profiles.default = {
|
||||||
search.force = true;
|
search.force = true;
|
||||||
search.default = "Google";
|
search.default = "google";
|
||||||
search.engines = {
|
search.engines = {
|
||||||
"Searx" = {
|
"Searx" = {
|
||||||
urls = [
|
urls = [
|
||||||
|
@ -79,7 +79,6 @@ in
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
bookmarks = [ ];
|
|
||||||
extensions = [ ];
|
extensions = [ ];
|
||||||
userChrome = builtins.readFile ./userchrome.css;
|
userChrome = builtins.readFile ./userchrome.css;
|
||||||
};
|
};
|
||||||
|
|
|
@ -84,7 +84,7 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
wayland.windowManager.hyprland = {
|
wayland.windowManager.hyprland = {
|
||||||
enable = true;
|
enable = false;
|
||||||
plugins = with pkgs.hyprlandPlugins; [
|
plugins = with pkgs.hyprlandPlugins; [
|
||||||
hy3
|
hy3
|
||||||
hyprspace
|
hyprspace
|
||||||
|
|
|
@ -223,16 +223,16 @@ layout {
|
||||||
// bottom 64
|
// bottom 64
|
||||||
}
|
}
|
||||||
|
|
||||||
// shadow {
|
shadow {
|
||||||
// on
|
on
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
layer-rule {
|
layer-rule {
|
||||||
match namespace="^rofi$"
|
match namespace="^rofi$"
|
||||||
// shadow {
|
shadow {
|
||||||
// on
|
on
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add lines like this to spawn processes at startup.
|
// Add lines like this to spawn processes at startup.
|
||||||
|
|
|
@ -70,24 +70,9 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.fish = {
|
programs.bash = {
|
||||||
enable = true;
|
enable = true;
|
||||||
plugins = [
|
initExtra = lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) ''
|
||||||
# {
|
|
||||||
# name = "fifc";
|
|
||||||
# src = pkgs.fishPlugins.fifc.src;
|
|
||||||
# }
|
|
||||||
{
|
|
||||||
name = "z";
|
|
||||||
src = pkgs.fishPlugins.z.src;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
shellInit =
|
|
||||||
''
|
|
||||||
# fish_vi_key_bindings
|
|
||||||
fish_default_key_bindings
|
|
||||||
''
|
|
||||||
+ lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) ''
|
|
||||||
export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path})
|
export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path})
|
||||||
'';
|
'';
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
|
@ -95,10 +80,43 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
programs.zoxide.enable = true;
|
||||||
|
programs.thefuck.enable = true;
|
||||||
|
programs.oh-my-posh = {
|
||||||
|
enable = true;
|
||||||
|
useTheme = "catppuccin_mocha";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.zellij.enableBashIntegration = false;
|
||||||
|
|
||||||
|
# programs.fish = {
|
||||||
|
# enable = true;
|
||||||
|
# plugins = [
|
||||||
|
# # {
|
||||||
|
# # name = "fifc";
|
||||||
|
# # src = pkgs.fishPlugins.fifc.src;
|
||||||
|
# # }
|
||||||
|
# {
|
||||||
|
# name = "z";
|
||||||
|
# src = pkgs.fishPlugins.z.src;
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# shellInit =
|
||||||
|
# ''
|
||||||
|
# # fish_vi_key_bindings
|
||||||
|
# fish_default_key_bindings
|
||||||
|
# ''
|
||||||
|
# + lib.optionalString (builtins.hasAttr "cachix-personal-token" age.secrets) ''
|
||||||
|
# export CACHIX_AUTH_TOKEN=$(cat ${age.secrets.cachix-personal-token.path})
|
||||||
|
# '';
|
||||||
|
# shellAliases = {
|
||||||
|
# "cat" = "bat";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
home.packages =
|
home.packages =
|
||||||
with pkgs;
|
with pkgs;
|
||||||
[
|
[
|
||||||
thefuck
|
|
||||||
dig.dnsutils
|
dig.dnsutils
|
||||||
lsof
|
lsof
|
||||||
comma
|
comma
|
||||||
|
|
|
@ -28,6 +28,29 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
portal = {
|
||||||
|
enable = true;
|
||||||
|
configPackages = with pkgs; [
|
||||||
|
# xdg-desktop-portal-wlr
|
||||||
|
# xdg-desktop-portal-gtk
|
||||||
|
# xdg-desktop-portal-hyprland
|
||||||
|
xdg-desktop-portal-gnome
|
||||||
|
# xdg-desktop-portal
|
||||||
|
# kdePackages.xdg-desktop-portal-kde
|
||||||
|
# libsForQt5.xdg-desktop-portal-kde
|
||||||
|
gnome-keyring
|
||||||
|
];
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
# xdg-desktop-portal-wlr
|
||||||
|
# xdg-desktop-portal-gtk
|
||||||
|
# xdg-desktop-portal-hyprland
|
||||||
|
xdg-desktop-portal-gnome
|
||||||
|
# xdg-desktop-portal
|
||||||
|
# kdePackages.xdg-desktop-portal-kde
|
||||||
|
gnome-keyring
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
home.packages = [ pkgs.xdg-utils ];
|
home.packages = [ pkgs.xdg-utils ];
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,6 @@ in
|
||||||
{
|
{
|
||||||
programs.zellij = {
|
programs.zellij = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableFishIntegration = false;
|
|
||||||
settings = {
|
settings = {
|
||||||
default_layout = "${layout}";
|
default_layout = "${layout}";
|
||||||
pane_frames = false;
|
pane_frames = false;
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
"tor-browser"
|
"tor-browser"
|
||||||
"kicad"
|
"kicad"
|
||||||
"monero"
|
"monero"
|
||||||
"zulip"
|
# "zulip"
|
||||||
"teams"
|
"teams"
|
||||||
"obs-studio"
|
"obs-studio"
|
||||||
"calibre"
|
"calibre"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ pkgs, lib, ... }:
|
{ lib, ... }:
|
||||||
{
|
{
|
||||||
services.radarr = {
|
services.radarr = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -6,9 +6,6 @@
|
||||||
|
|
||||||
services.sonarr = {
|
services.sonarr = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package =
|
|
||||||
(builtins.getFlake "github:NixOS/nixpkgs/c80f6a7e10b39afcc1894e02ef785b1ad0b0d7e5")
|
|
||||||
.legacyPackages.${pkgs.stdenv.system}.sonarr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.prowlarr = {
|
services.prowlarr = {
|
||||||
|
|
|
@ -28,7 +28,7 @@ in
|
||||||
|
|
||||||
shell = lib.mkOption {
|
shell = lib.mkOption {
|
||||||
type = lib.types.package;
|
type = lib.types.package;
|
||||||
default = pkgs.fish;
|
default = pkgs.bash;
|
||||||
};
|
};
|
||||||
|
|
||||||
modules = lib.mkOption {
|
modules = lib.mkOption {
|
||||||
|
@ -103,8 +103,6 @@ in
|
||||||
openssh.authorizedKeys.keys = config.ccr.authorizedKeys;
|
openssh.authorizedKeys.keys = config.ccr.authorizedKeys;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.fish.enable = true;
|
|
||||||
|
|
||||||
services.getty.autologinUser = if config.ccr.autologin then cfg.username else null;
|
services.getty.autologinUser = if config.ccr.autologin then cfg.username else null;
|
||||||
|
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.useGlobalPkgs = true;
|
||||||
|
|
|
@ -1,29 +1,51 @@
|
||||||
{ pkgs, ... }:
|
{ pkgs, ... }:
|
||||||
{
|
{
|
||||||
xdg = {
|
xdg = {
|
||||||
|
autostart.enable = true;
|
||||||
|
menus.enable = true;
|
||||||
|
mime.enable = true;
|
||||||
|
icons.enable = true;
|
||||||
portal = {
|
portal = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configPackages = with pkgs; [
|
configPackages = with pkgs; [
|
||||||
xdg-desktop-portal-wlr
|
# xdg-desktop-portal-wlr
|
||||||
xdg-desktop-portal-gtk
|
# xdg-desktop-portal-gtk
|
||||||
xdg-desktop-portal-hyprland
|
# xdg-desktop-portal-hyprland
|
||||||
xdg-desktop-portal-gnome
|
xdg-desktop-portal-gnome
|
||||||
xdg-desktop-portal
|
# xdg-desktop-portal
|
||||||
kdePackages.xdg-desktop-portal-kde
|
# kdePackages.xdg-desktop-portal-kde
|
||||||
libsForQt5.xdg-desktop-portal-kde
|
# libsForQt5.xdg-desktop-portal-kde
|
||||||
gnome-keyring
|
gnome-keyring
|
||||||
];
|
];
|
||||||
extraPortals = with pkgs; [
|
extraPortals = with pkgs; [
|
||||||
xdg-desktop-portal-wlr
|
# xdg-desktop-portal-wlr
|
||||||
xdg-desktop-portal-gtk
|
# xdg-desktop-portal-gtk
|
||||||
xdg-desktop-portal-hyprland
|
# xdg-desktop-portal-hyprland
|
||||||
xdg-desktop-portal-gnome
|
xdg-desktop-portal-gnome
|
||||||
xdg-desktop-portal
|
# xdg-desktop-portal
|
||||||
kdePackages.xdg-desktop-portal-kde
|
# kdePackages.xdg-desktop-portal-kde
|
||||||
gnome-keyring
|
gnome-keyring
|
||||||
];
|
];
|
||||||
xdgOpenUsePortal = true;
|
xdgOpenUsePortal = true;
|
||||||
wlr.enable = true;
|
wlr.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
|
||||||
|
security.polkit.enable = true;
|
||||||
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
systemd.user.services.niri-flake-polkit = {
|
||||||
|
description = "PolicyKit Authentication Agent provided by niri-flake";
|
||||||
|
wantedBy = [ "niri.service" ];
|
||||||
|
after = [ "graphical-session.target" ];
|
||||||
|
partOf = [ "graphical-session.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = 1;
|
||||||
|
TimeoutStopSec = 10;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,6 +182,7 @@ let
|
||||||
markdown-mode
|
markdown-mode
|
||||||
haskell-mode
|
haskell-mode
|
||||||
terraform-mode
|
terraform-mode
|
||||||
|
rust-mode
|
||||||
diredfl
|
diredfl
|
||||||
org-modern
|
org-modern
|
||||||
math-preview
|
math-preview
|
||||||
|
|
Loading…
Add table
Reference in a new issue