initial
This commit is contained in:
61
.session
Normal file
61
.session
Normal file
@@ -0,0 +1,61 @@
|
||||
let SessionLoad = 1
|
||||
let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1
|
||||
let v:this_session=expand("<sfile>:p")
|
||||
doautoall SessionLoadPre
|
||||
silent only
|
||||
silent tabonly
|
||||
cd ~/Projects/nix-server
|
||||
if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == ''
|
||||
let s:wipebuf = bufnr('%')
|
||||
endif
|
||||
let s:shortmess_save = &shortmess
|
||||
set shortmess+=aoO
|
||||
badd +6 flake.nix
|
||||
badd +21 modules/default.nix
|
||||
badd +10 modules/parts.nix
|
||||
badd +12 modules/hosts/server02/default.nix
|
||||
badd +6 modules/hosts/server02/server02Configuration.nix
|
||||
badd +20 modules/system/core/default.nix
|
||||
badd +6 ~/Projects/nix-server/modules/system/core/bootloader.nix
|
||||
badd +32 modules/system/core/locale.nix
|
||||
badd +35 modules/system/core/nix-settings.nix
|
||||
badd +7 modules/system/core/user.nix
|
||||
badd +9 modules/hosts/server02/hardware-configuration.nix
|
||||
argglobal
|
||||
%argdel
|
||||
$argadd modules/hosts/server02/server02Configuration.nix
|
||||
edit modules/hosts/server02/server02Configuration.nix
|
||||
argglobal
|
||||
balt modules/hosts/server02/hardware-configuration.nix
|
||||
setlocal foldmethod=manual
|
||||
setlocal foldexpr=0
|
||||
setlocal foldmarker={{{,}}}
|
||||
setlocal foldignore=#
|
||||
setlocal foldlevel=0
|
||||
setlocal foldminlines=1
|
||||
setlocal foldnestmax=20
|
||||
setlocal foldenable
|
||||
silent! normal! zE
|
||||
let &fdl = &fdl
|
||||
let s:l = 6 - ((5 * winheight(0) + 27) / 55)
|
||||
if s:l < 1 | let s:l = 1 | endif
|
||||
keepjumps exe s:l
|
||||
normal! zt
|
||||
keepjumps 6
|
||||
normal! 043|
|
||||
tabnext 1
|
||||
if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0 && getbufvar(s:wipebuf, '&buftype') isnot# 'terminal'
|
||||
silent exe 'bwipe ' . s:wipebuf
|
||||
endif
|
||||
unlet! s:wipebuf
|
||||
set winheight=1 winwidth=20
|
||||
let &shortmess = s:shortmess_save
|
||||
let s:sx = expand("<sfile>:p:r")."x.vim"
|
||||
if filereadable(s:sx)
|
||||
exe "source " . fnameescape(s:sx)
|
||||
endif
|
||||
let &g:so = s:so_save | let &g:siso = s:siso_save
|
||||
nohlsearch
|
||||
doautoall SessionLoadPost
|
||||
unlet SessionLoad
|
||||
" vim: set ft=vim :
|
||||
1640
flake.lock
generated
Normal file
1640
flake.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
15
flake.nix
Normal file
15
flake.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
description = "nix flake config for server02";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||
nix-config.url = "git+https://git.voidarc.co.uk/voidarc/nixos.git?ref=dendritic";
|
||||
|
||||
# flake parts
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
import-tree.url = "github:vic/import-tree";
|
||||
wrappers.url = "github:BirdeeHub/nix-wrapper-modules";
|
||||
};
|
||||
|
||||
outputs = inputs: inputs.flake-parts.lib.mkFlake {inherit inputs;} (inputs.import-tree ./modules);
|
||||
}
|
||||
29
modules/default.nix
Normal file
29
modules/default.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
self,
|
||||
moduleWithSystem,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.name = moduleWithSystem ({
|
||||
pkgs,
|
||||
self',
|
||||
inputs',
|
||||
...
|
||||
}: let
|
||||
modules = with self.nixosModules; [];
|
||||
in {
|
||||
imports = modules;
|
||||
programs.name = {
|
||||
enable = true;
|
||||
package = self'.packages.hello;
|
||||
};
|
||||
});
|
||||
perSystem = {
|
||||
pkgs,
|
||||
lib,
|
||||
self',
|
||||
...
|
||||
}: {
|
||||
packages.hello = pkgs.hello;
|
||||
};
|
||||
}
|
||||
|
||||
18
modules/hosts/server02/default.nix
Normal file
18
modules/hosts/server02/default.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosConfigurations.server02 = inputs.nixpkgs.lib.nixosSystem {
|
||||
modules = with self.nixosModules;
|
||||
[
|
||||
server02Configuration
|
||||
core
|
||||
]
|
||||
++ (with inputs.nix-config.nixosModules; [
|
||||
nvim
|
||||
git
|
||||
zsh
|
||||
]);
|
||||
};
|
||||
}
|
||||
221
modules/hosts/server02/hardware-configuration.nix
Normal file
221
modules/hosts/server02/hardware-configuration.nix
Normal file
@@ -0,0 +1,221 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
# imports = [
|
||||
# (modulesPath + "/installer/scan/not-detected.nix")
|
||||
# ];
|
||||
|
||||
boot.initrd.availableKernelModules = ["ehci_pci" "ahci"];
|
||||
boot.initrd.kernelModules = [];
|
||||
boot.kernelModules = ["kvm-intel"];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/d4e94dc6-9f91-48f7-a15c-5fa692e1e5af";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# fileSystems."/root/storage" =
|
||||
# { device = "1:2";
|
||||
# fsType = "fuse.mergerfs";
|
||||
# };
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/4F7D-B111";
|
||||
fsType = "vfat";
|
||||
options = ["fmask=0022" "dmask=0022"];
|
||||
};
|
||||
|
||||
# fileSystems."/root/.drive02" =
|
||||
# { device = "/dev/disk/by-uuid/842c9326-9cc8-4c96-82d1-c14a233322b1";
|
||||
# fsType = "ext4";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/root/.drive01" =
|
||||
# { device = "/dev/disk/by-uuid/bccbe88e-6de3-4590-ac19-4ac5edb107d7";
|
||||
# fsType = "ext4";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/plugins/c4120f8fa8cb60eab3d378a19b017aebe296795e48eed8e3060804b379d87399/propagated-mount" =
|
||||
# { device = "/var/lib/docker/plugins/c4120f8fa8cb60eab3d378a19b017aebe296795e48eed8e3060804b379d87399/propagated-mount";
|
||||
# fsType = "none";
|
||||
# options = [ "bind" ];
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/73c9c82c5efb91ec67ce846db8769f7bfb48c7e05285a39cb10c31663315db02/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/307e8281da20fb717ef42688aff2bc867943e3a99ceced4e254151a04e75f3bc/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/3ac827d97a4191f0da71179c2d054ac9bc290198fa2ef7b174e1a62ff0a9f729/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/8378b4653a99b0245b6404fdb7723bb08ef9562d3418ae332bf1c6250b5c1e28/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/23bfc096943dfdc7fe3eeeca915d3b615a001c84a7118430dad1b9da0943df5a/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/bd6e721ecb747198b8274e35fb3e5006ed3ce661ea8e48ba8eca122aa25e32e3/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/b7bc27eb0dbf0be4c754d25064cdd51582f6d930b8f9a41a144126f4ec54c302/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/350059d31d3d66a4d550c8aeae7308ba1710b3aea0080d67108a9d089cbfd35e/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/5ccc1b072a40fab27559f5e475c80a0ed5ab3bfa98bd8bfff35b2ac0343f3a94/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/920d88be3abb6a4119a779a50fc8b05cffbdd812d02412a2c1a2970a13769856/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/7076053237f83bdfdafa7b0c4b11f441eeb77daea2b19880b3fb5afa4d0cb8e9/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/7bea710f9027985871b4073793c46f91ab689eeca00b877b4c0e252e45cf5e77/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/49966a5297c8a06c76e7759c4d0cdc1f57640db5267fbb10be8e3380a0d3dfae/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/6005a10ed26aecace89554efaf4d3f659497a65672e5617b69436bc6ce55fcce/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/611835e567ba6743b84158825f0772eef4fa9ad6f5dbe21688f191f66d74e67a/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/a1c2936c21bea5fbaf1aeee9868a8257b59a95a0ee469f2cf625043110648e84/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/fa1801418bcc376df004e790340c155369f4a7183b99d62331cfeb55a86bb67b/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/d2001d0a70120897324e689a037251200ecde5bbd471e9ed479c6be41e9dea37/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/841ab54d8f67a54731fdc4c8ce4af1213fab151c24e8363fc2d65ef5bfe559d0/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/bdbf1bdd70c87ff5e36d14bb4d0479c7e030bc40902f7edbec209bd3bce19d76/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/a69f03080494107191f8b7dfaf187e310baf05777fce6717a5c3dc5403986d7a/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/8c484d032fa26caeef8f24753c07ad2d9b8c3faebf4ad023080193400bc84476/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/ea7ebc83f6ed537636a3f5a51d9951913a0e606869171abbc921457149e55dfe/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/aa63044c954417169b4badf1880d7db9db4e22cc8bcbaf6a50a0459f3a46edef/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/7a8c8fcb0f56285089eb83dca9c51c65006b32dc9450c688e75655c7396ac0a3/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/50fd98b78bf6e73bc06e575f4deb9ca3e08ad5356c54726eda4447b2c3d1e3dd/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/cd44f75d0cf10b13b05d0adf4e61fe3d4c3a1a58427516a6b26b17a00ed34f5a/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/3c8d485956a4bf043bb8f9fa66f7a3bd354447ba68c5b5b005d0a9da29c26db4/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/a8ddc365eec265d237d3445ba68756083e5d8b31927e617fe84454e7e7bda160/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/874b2bfac8d4790a4f96303368ae6aa4230566cc5471993adbf16b706aafc995/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/45ab55ae434047649d24b9b3428c573b5febdce23db983c41902fb866b995af2/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/6eff329e22afd55e776e5cae64cec9a159b6edc533fdae492e6e84dbbad41b0b/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
#
|
||||
# fileSystems."/var/lib/docker/overlay2/9366547c67f8711c7def21f79aade5473dac16efebc449d22fdeaf4efaf9b32c/merged" =
|
||||
# { device = "overlay";
|
||||
# fsType = "overlay";
|
||||
# };
|
||||
|
||||
swapDevices = [];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
8
modules/hosts/server02/server02Configuration.nix
Normal file
8
modules/hosts/server02/server02Configuration.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{...}: {
|
||||
flake.nixosModules.server02Configuration = {...}: {
|
||||
networking = {
|
||||
hostName = "mobile02";
|
||||
};
|
||||
imports = [./hardware-configuration.nix];
|
||||
};
|
||||
}
|
||||
10
modules/parts.nix
Normal file
10
modules/parts.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
config = {
|
||||
systems = [
|
||||
"x86_64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-linux"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
}
|
||||
24
modules/system/core/bootloader.nix
Normal file
24
modules/system/core/bootloader.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.bootloader = {
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
boot = {
|
||||
loader = {
|
||||
timeout = 2;
|
||||
efi = {
|
||||
canTouchEfiVariables = true;
|
||||
};
|
||||
systemd-boot = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
kernelPackages = pkgs.linuxPackages_latest;
|
||||
};
|
||||
};
|
||||
}
|
||||
39
modules/system/core/default.nix
Normal file
39
modules/system/core/default.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.core = {
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
modules = with self.nixosModules; [
|
||||
user
|
||||
bootloader
|
||||
nix
|
||||
locale
|
||||
];
|
||||
in {
|
||||
imports =
|
||||
[
|
||||
# /etc/nixos/hardware-configuration.nix
|
||||
]
|
||||
++ modules;
|
||||
services = {
|
||||
openssh.enable = true;
|
||||
avahi.enable = true;
|
||||
};
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim
|
||||
unzip
|
||||
p7zip-rar
|
||||
usbutils
|
||||
lsof
|
||||
python315
|
||||
curlWithGnuTls
|
||||
wget
|
||||
];
|
||||
system.stateVersion = "26.02";
|
||||
};
|
||||
}
|
||||
32
modules/system/core/locale.nix
Normal file
32
modules/system/core/locale.nix
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.locale = {
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
time.timeZone = "Europe/London";
|
||||
i18n = {
|
||||
defaultLocale = "en_GB.UTF-8";
|
||||
extraLocaleSettings = {
|
||||
LC_ADDRESS = "en_GB.UTF-8";
|
||||
LC_IDENTIFICATION = "en_GB.UTF-8";
|
||||
LC_MEASUREMENT = "en_GB.UTF-8";
|
||||
LC_MONETARY = "en_GB.UTF-8";
|
||||
LC_NAME = "en_GB.UTF-8";
|
||||
LC_NUMERIC = "en_GB.UTF-8";
|
||||
LC_PAPER = "en_GB.UTF-8";
|
||||
LC_TELEPHONE = "en_GB.UTF-8";
|
||||
LC_TIME = "en_GB.UTF-8";
|
||||
};
|
||||
};
|
||||
services.xserver.xkb = {
|
||||
layout = "gb";
|
||||
variant = "";
|
||||
};
|
||||
console.keyMap = "uk";
|
||||
};
|
||||
}
|
||||
52
modules/system/core/nix-settings.nix
Normal file
52
modules/system/core/nix-settings.nix
Normal file
@@ -0,0 +1,52 @@
|
||||
{inputs, ...}: {
|
||||
perSystem = {system, ...}: {
|
||||
_module.args.unfreePkgs = import inputs.nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
flake.nixosModules.nix = {...}: {
|
||||
nix = {
|
||||
registry = {
|
||||
voidarc = {
|
||||
from = {
|
||||
id = "voidarc";
|
||||
type = "indirect";
|
||||
};
|
||||
to = {
|
||||
type = "git";
|
||||
url = "https://git.voidarc.co.uk/voidarc/flakes.git";
|
||||
};
|
||||
};
|
||||
};
|
||||
settings = {
|
||||
cores = 2;
|
||||
trusted-users = ["root"];
|
||||
download-buffer-size = 524288000;
|
||||
experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
};
|
||||
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
|
||||
optimise.automatic = true;
|
||||
gc = {
|
||||
automatic = true;
|
||||
dates = "daily";
|
||||
options = "--delete-older-than 5d";
|
||||
};
|
||||
};
|
||||
nixpkgs = {
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
packageOverrides = pkgs: {
|
||||
unstable = import inputs.nixpkgs-unstable {
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
24
modules/system/core/user.nix
Normal file
24
modules/system/core/user.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
flake.nixosModules.user = {
|
||||
pkgs,
|
||||
lib,
|
||||
inputs',
|
||||
...
|
||||
}: let
|
||||
in {
|
||||
users.users.user01 = {
|
||||
isNormalUser = true;
|
||||
initialPassword = "password";
|
||||
shell = inputs'.nix-config.packages.zsh;
|
||||
description = "user01";
|
||||
extraGroups = [
|
||||
"root"
|
||||
"wheel"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user