diff --git a/flake.lock b/flake.lock index 740ae95..6dfdb35 100644 --- a/flake.lock +++ b/flake.lock @@ -126,11 +126,11 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1733328505, - "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", "owner": "edolstra", "repo": "flake-compat", - "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { @@ -406,16 +406,16 @@ ] }, "locked": { - "lastModified": 1747331121, - "narHash": "sha256-3MmiUN/jOHBHQUnjqzg6qKArc17j2OS6jisEppDY4g8=", + "lastModified": 1749154018, + "narHash": "sha256-gjN3j7joRvT3a8Zgcylnd4NFsnXeDBumqiu4HmY1RIg=", "owner": "nix-community", "repo": "home-manager", - "rev": "1eec32f0efe3b830927989767a9e6ece0d82d608", + "rev": "7aae0ee71a17b19708b93b3ed448a1a0952bf111", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-24.11", + "ref": "release-25.05", "repo": "home-manager", "type": "github" } @@ -494,11 +494,11 @@ "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1747620481, - "narHash": "sha256-MiZ5Z7MHP42+ck277fzzu4C8w1K6OAxM5PhCQX22+FA=", + "lastModified": 1749175420, + "narHash": "sha256-5gOh2Jpp7HLzyV3RVkIS88F9lhpnTpsCzOu8J1w7Uuo=", "owner": "Infinidoge", "repo": "nix-minecraft", - "rev": "b15bd5c18f94065f96b5a46e57c506e5f30c3918", + "rev": "ad263175ac965617a3fe4b3d46e1fcabb4964f51", "type": "github" }, "original": { @@ -555,11 +555,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1747542820, - "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", + "lastModified": 1748929857, + "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", "owner": "nixos", "repo": "nixpkgs", - "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", + "rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", "type": "github" }, "original": { @@ -586,11 +586,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1742889210, - "narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=", + "lastModified": 1748929857, + "narHash": "sha256-lcZQ8RhsmhsK8u7LIFsJhsLh/pzR9yZ8yqpTzyGdj+Q=", "owner": "nixos", "repo": "nixpkgs", - "rev": "698214a32beb4f4c8e3942372c694f40848b360d", + "rev": "c2a03962b8e24e669fb37b7df10e7c79531ff1a4", "type": "github" }, "original": { @@ -602,16 +602,16 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1747485343, - "narHash": "sha256-YbsZyuRE1tobO9sv0PUwg81QryYo3L1F3R3rF9bcG38=", + "lastModified": 1749086602, + "narHash": "sha256-DJcgJMekoxVesl9kKjfLPix2Nbr42i7cpEHJiTnBUwU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9b5ac7ad45298d58640540d0323ca217f32a6762", + "rev": "4792576cb003c994bd7cc1edada3129def20b27d", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-24.11", + "ref": "nixos-25.05", "repo": "nixpkgs", "type": "github" } @@ -650,11 +650,11 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1746904237, - "narHash": "sha256-3e+AVBczosP5dCLQmMoMEogM57gmZ2qrVSrmq9aResQ=", + "lastModified": 1748460289, + "narHash": "sha256-7doLyJBzCllvqX4gszYtmZUToxKvMUrg45EUWaUYmBg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d89fc19e405cb2d55ce7cc114356846a0ee5e956", + "rev": "96ec055edbe5ee227f28cdbc3f1ddf1df5965102", "type": "github" }, "original": { @@ -703,11 +703,11 @@ "nixvim": "nixvim_2" }, "locked": { - "lastModified": 1747625133, - "narHash": "sha256-CcLAy4g4RTxetDoaEVxQ05PLnRXUj3snYQoMdpk7GEQ=", + "lastModified": 1748872216, + "narHash": "sha256-+6QOvjT5JKB7/t5TYXZrJSXmCspdbkUGp33tzsH3XQc=", "ref": "refs/heads/master", - "rev": "a05b6e401c09b7d5eadd15e39dc97398bc3cf85d", - "revCount": 80, + "rev": "0d8a42be826b6c7a2b77e28297c87527403d4aaa", + "revCount": 82, "type": "git", "url": "https://git.sajenim.dev/jasmine/nixvim-config.git" }, @@ -812,11 +812,11 @@ "poetry2nix": "poetry2nix" }, "locked": { - "lastModified": 1747081355, - "narHash": "sha256-KvYgYyjvUrqBPOtH4XSsdS4G9P+tC1RUw0Htsh0Je78=", + "lastModified": 1748613246, + "narHash": "sha256-TVAkdTn4B/iT0ZXNgmIHEB1GEFDuOwKIKuX4DaFPF28=", "owner": "Scrybbling-together", "repo": "remarks", - "rev": "9597162c8633e0647e3e1acc83c421004d8686a7", + "rev": "78a374a8abac158617a6512e2b31e2de5e8b620c", "type": "github" }, "original": { @@ -998,11 +998,11 @@ "nixpkgs": "nixpkgs_9" }, "locked": { - "lastModified": 1747628408, - "narHash": "sha256-529qpELpG4D7pNslmyX3FszqjzxhJvlxTWTRJ0EA9YE=", + "lastModified": 1747754433, + "narHash": "sha256-TGH+IhbDPuJ4nnWveRmXL5+R2SAgu5nUvm2M1534rRc=", "ref": "refs/heads/master", - "rev": "fa9754e0b61a1a9b586dcaa1d1b989d7861f6c68", - "revCount": 35, + "rev": "abf0c78203f7644b4cca9a72fadefd142ab89604", + "revCount": 36, "type": "git", "url": "https://git.sajenim.dev/jasmine/xmonad-config.git" }, diff --git a/flake.nix b/flake.nix index 850a726..05862bb 100644 --- a/flake.nix +++ b/flake.nix @@ -3,12 +3,12 @@ inputs = { # Nixpkgs - nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; # Home manager home-manager = { - url = "github:nix-community/home-manager/release-24.11"; + url = "github:nix-community/home-manager/release-25.05"; inputs.nixpkgs.follows = "nixpkgs"; }; diff --git a/home-manager/sajenim/features/cli/default.nix b/home-manager/sajenim/features/cli/default.nix index 2e5f40c..9aec608 100644 --- a/home-manager/sajenim/features/cli/default.nix +++ b/home-manager/sajenim/features/cli/default.nix @@ -1,15 +1,22 @@ -{pkgs, ...}: { +{ + inputs, + pkgs, + ... +}: { imports = [ ./git.nix ./mpd.nix - ./nvim.nix - ./remarkable.nix ./ssh.nix - ./zsh.nix ]; - home.packages = with pkgs; [ - pulsemixer - unstable.qmk - ]; + home.packages = with pkgs; + [ + mum + pulsemixer + unstable.qmk + unstable.rmapi + ] + ++ [ + inputs.remarks.packages.${pkgs.system}.default + ]; } diff --git a/home-manager/sajenim/features/cli/nvim.nix b/home-manager/sajenim/features/cli/nvim.nix deleted file mode 100644 index 79c27cf..0000000 --- a/home-manager/sajenim/features/cli/nvim.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - inputs, - pkgs, - ... -}: { - home.packages = [ - # Toolchain - pkgs.gcc - pkgs.python313Full - - # Setup developer environments - pkgs.direnv - pkgs.unstable.devenv - - # Install our nixvim configuration for neovim. - inputs.nixvim.packages.${pkgs.system}.default - ]; -} diff --git a/home-manager/sajenim/features/cli/remarkable.nix b/home-manager/sajenim/features/cli/remarkable.nix deleted file mode 100644 index ac72c24..0000000 --- a/home-manager/sajenim/features/cli/remarkable.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - pkgs, - inputs, - ... -}: { - # This module is for the ReMarkable tablet, which is a Linux-based e-reader - home.packages = [ - # Allows access to the ReMarkable Cloud API - pkgs.unstable.rmapi - # Converts ReMarkable files to PDF - inputs.remarks.packages.${pkgs.system}.default - ]; -} diff --git a/home-manager/sajenim/features/desktop/xinitrc b/home-manager/sajenim/features/desktop/xinitrc index e8738c0..c96d774 100644 --- a/home-manager/sajenim/features/desktop/xinitrc +++ b/home-manager/sajenim/features/desktop/xinitrc @@ -4,7 +4,7 @@ xrandr --output HDMI-A-0 --mode 1920x1080 --rotate left --output DisplayPort-0 --mode 2560x1440 --right-of HDMI-A-0 # Apply our wallpaper -feh --bg-center ~/.repositories/nix-config/assets/chinatown.png --bg-center ~/.repositories/nix-config/assets/chinatown-rotated.png +feh --bg-center ~/.repositories/forgejo/nix-config/assets/chinatown.png --bg-center ~/.repositories/forgejo/nix-config/assets/chinatown-rotated.png # Disable screen saver and DPMS features xset s off -dpms diff --git a/home-manager/sajenim/features/editor/default.nix b/home-manager/sajenim/features/editor/default.nix new file mode 100644 index 0000000..9613e12 --- /dev/null +++ b/home-manager/sajenim/features/editor/default.nix @@ -0,0 +1,16 @@ +{ + inputs, + pkgs, + ... +}: { + home.packages = with pkgs; + [ + gcc + pandoc + python313Full + texliveFull + ] + ++ [ + inputs.nixvim.packages.${pkgs.system}.default + ]; +} diff --git a/home-manager/sajenim/fuchsia.nix b/home-manager/sajenim/fuchsia.nix index fd84f49..37e984c 100644 --- a/home-manager/sajenim/fuchsia.nix +++ b/home-manager/sajenim/fuchsia.nix @@ -1,7 +1,9 @@ {...}: { imports = [ ./global + ./features/cli ./features/desktop + ./features/editor ./features/games ./features/printing ./features/university diff --git a/home-manager/sajenim/global/default.nix b/home-manager/sajenim/global/default.nix index 61e1725..02bc257 100644 --- a/home-manager/sajenim/global/default.nix +++ b/home-manager/sajenim/global/default.nix @@ -1,6 +1,6 @@ {outputs, ...}: { imports = [ - ../features/cli + ./zsh.nix ]; nixpkgs = { diff --git a/home-manager/sajenim/features/cli/zsh.nix b/home-manager/sajenim/global/zsh.nix similarity index 73% rename from home-manager/sajenim/features/cli/zsh.nix rename to home-manager/sajenim/global/zsh.nix index bf3757a..ae4948c 100644 --- a/home-manager/sajenim/features/cli/zsh.nix +++ b/home-manager/sajenim/global/zsh.nix @@ -14,20 +14,18 @@ enable = true; }; enableCompletion = true; + + # Configuration directory dotDir = ".config/zsh"; - # Commands that should be added to to top of '.zshrc' - initExtraFirst = '' - ''; - - # Aliases shellAliases = { + # Single letter aliases c = "clear"; + v = "nvim"; + + # Double letter aliases la = "ls -a"; ll = "ls -l"; - tt = "wezterm cli set-tab-title "; - mount-backup = "sshfs viridian:/srv/shares/sajenim /home/sajenim/.backup"; - mount-turing = "sshfs turing:/home/jwils254 /home/sajenim/.turing"; }; # Install plugins @@ -44,10 +42,9 @@ ]; # Extra commands that should be added to '.zshrc' - initExtra = '' + initContent = '' eval "$(direnv hook zsh)" source ${pkgs.zsh-vi-mode}/share/zsh-vi-mode/zsh-vi-mode.plugin.zsh - path+=('/home/sajenim/.repositories/sysadmin.sh/bin') bindkey "^[[1;5C" forward-word bindkey "^[[1;5D" backward-word export PATH diff --git a/home-manager/sajenim/viridian.nix b/home-manager/sajenim/viridian.nix index 19c4cfc..859bc28 100644 --- a/home-manager/sajenim/viridian.nix +++ b/home-manager/sajenim/viridian.nix @@ -1,5 +1,25 @@ -{...}: { +{ + inputs, + pkgs, + ... +}: { imports = [ ./global ]; + + home.packages = with pkgs; + [ + weechat + ] + ++ [ + inputs.nixvim.packages.${pkgs.system}.default + ]; + + programs.tmux = { + enable = true; + extraConfig = '' + set -g default-terminal "tmux-256color" + set -g status off + ''; + }; } diff --git a/nixos/fuchsia/configuration.nix b/nixos/fuchsia/configuration.nix index 3a395d5..5b660c4 100644 --- a/nixos/fuchsia/configuration.nix +++ b/nixos/fuchsia/configuration.nix @@ -33,12 +33,6 @@ adb.enable = true; }; - # Manage linux containers - virtualisation.docker = { - enable = true; - liveRestore = false; - }; - # https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion system.stateVersion = "24.05"; } diff --git a/nixos/viridian/configuration.nix b/nixos/viridian/configuration.nix index 078d937..0ac433a 100644 --- a/nixos/viridian/configuration.nix +++ b/nixos/viridian/configuration.nix @@ -24,9 +24,10 @@ enable = true; allowPing = true; allowedTCPPorts = [ - 80 - 443 - 6600 + 80 # http + 443 # https + 6600 # mpd + 6697 # inspircd ]; }; }; @@ -34,6 +35,8 @@ # Configure programs programs = { zsh.enable = true; + # Load and unload environment variables + direnv.enable = true; }; # Manage linux containers diff --git a/nixos/viridian/services/crowdsec/default.nix b/nixos/viridian/services/crowdsec/default.nix index 8a2b363..2201c29 100644 --- a/nixos/viridian/services/crowdsec/default.nix +++ b/nixos/viridian/services/crowdsec/default.nix @@ -97,24 +97,6 @@ in { ]; }; - environment.etc = { - "/crowdsec/parsers/s02-enrich/whitelist.yaml" = { - text = '' - name: "sajenim/whitelist" - description: "Whitelist events from my ipv4 addresses" - whitelist: - reason: "my ipv4 ranges" - ip: - - "127.0.0.1" - cidr: - - "192.168.0.0/16" - - "10.0.0.0/8" - - "172.16.0.0/12" - ''; - mode = "0755"; - }; - }; - environment.persistence."/persist" = { directories = [ { diff --git a/nixos/viridian/services/default.nix b/nixos/viridian/services/default.nix index 888754b..085e7f7 100644 --- a/nixos/viridian/services/default.nix +++ b/nixos/viridian/services/default.nix @@ -3,10 +3,12 @@ ./borgbackup ./crowdsec ./forgejo + ./inspircd ./jupyterhub ./lighttpd ./minecraft ./mpd + ./murmur ./traefik ]; } diff --git a/nixos/viridian/services/inspircd/default.nix b/nixos/viridian/services/inspircd/default.nix new file mode 100644 index 0000000..4fdaaa4 --- /dev/null +++ b/nixos/viridian/services/inspircd/default.nix @@ -0,0 +1,10 @@ +{...}: { + services.inspircd = { + enable = true; + config = builtins.readFile ./inspircd.conf; + }; + + environment.etc = { + "inspircd/inspircd.motd".source = ./inspircd.motd; + }; +} diff --git a/nixos/viridian/services/inspircd/inspircd.conf b/nixos/viridian/services/inspircd/inspircd.conf new file mode 100644 index 0000000..fa9fc8c --- /dev/null +++ b/nixos/viridian/services/inspircd/inspircd.conf @@ -0,0 +1,643 @@ +#-#-#-#-#-#-#-#-#-#-#-#- SERVER DESCRIPTION -#-#-#-#-#-#-#-#-#-#-#-#- +# # +# Here is where you enter the information about your server. # +# # + + + + +#-#-#-#-#-#-#-#-#-#-#-#- ADMIN INFORMATION -#-#-#-#-#-#-#-#-#-#-#-# +# # +# Describes the Server Administrator's real name (optionally), # +# nick, and email address. # +# # + + + + +#-#-#-#-#-#-#-#-#-#-#-#- PORT CONFIGURATION -#-#-#-#-#-#-#-#-#-#-#- +# # +# Configure the port and address bindings here. # +# # + + + + +#-#-#-#-#-#-#-#-#-#- CONNECTIONS CONFIGURATION -#-#-#-#-#-#-#-#-#-#-# +# # +# This is where you can configure which connections are allowed # +# and denied access onto your server. The password is optional. # +# You may have as many of these as you require. To allow/deny all # +# connections, use a '*' or 0.0.0.0/0. # +# # +# -- It is important to note that connect tags are read from the -- # +# TOP DOWN. This means that you should have more specific deny # +# and allow tags at the top, progressively more general, followed # +# by a (should you wish to have one). # +# # +# Connect blocks are searched twice for each user - once when the TCP # +# connection is accepted, and once when the user completes their # +# registration. Most of the information (hostname, ident response, # +# password, TLS (SSL) when using STARTTLS, etc) is only available # +# during the second search. If you are trying to make a closed server # +# you will probably need a connect block just for user registration. # +# This can be done by using # + + + + + +#-#-#-#-#-#-#-#-#-#-#-#- CIDR CONFIGURATION -#-#-#-#-#-#-#-#-#-#-#- +# # +# CIDR configuration allows detection of clones and applying of # +# throttle limits across a CIDR range. (A CIDR range is a group of # +# IPs, for example, the CIDR range 192.168.1.0-192.168.1.255 may be # +# represented as 192.168.1.0/24). This means that abuse across an ISP # +# is detected and curtailed much easier. Here is a good chart that # +# shows how many IPs the different CIDRs correspond to: # +# https://en.wikipedia.org/wiki/IPv4_subnetting_reference # +# https://en.wikipedia.org/wiki/IPv6_subnetting_reference # +# # + + + + +#-#-#-#-#-#-#-#-#-#- MISCELLANEOUS CONFIGURATION -#-#-#-#-#-#-#-#-#-# +# # + +# Files block - contains files whose contents are used by the ircd +# +# motd - displayed on connect and when a user executes /MOTD +# Modules can also define their own files + + +#-#-#-#-#-#-#-#-#-#-#-#-#-#-# DNS SERVER -#-#-#-#-#-#-#-#-#-#-#-#-#-#-# +# If these values are not defined, InspIRCd uses the default DNS resolver +# of your system. + + + +#-#-#-#-#-#-#-#-#-#-#-#-#- LIST MODE LIMITS #-#-#-#-#-#-#-#-#-#-#-#-#-# +# # +# The tag is used customise the maximum number of each list # +# mode that can be set on a channel. # +# The tags are read from top to bottom and the list mode limit from # +# the first tag found which matches the channel name and mode type is # +# applied to that channel. # +# It is advisable to put an entry with the channel as '*' at the # +# bottom of the list. If none are specified or no maxlist tag is # +# matched, the banlist size defaults to 100 entries. # +# # + +# Allows all channels and list modes not previously matched to have +# up to 100 entries. + + +#-#-#-#-#-#-#-#-#-#-#-#-#- SERVER OPTIONS -#-#-#-#-#-#-#-#-#-#-#-#-# +# # +# Settings to define which features are usable on your server. # +# # + + tags without an address. Choices are + # ipv4 or ipv6; if not specified, IPv6 will be used if your system has support, + # falling back to IPv4 otherwise. + defaultbind="auto" + + # hostintopic: If enabled, channels will show the host of the topic setter + # in the topic. If set to no, it will only show the nick of the topic setter. + hostintopic="yes" + + # pingwarning: If a server does not respond to a ping within this period, + # it will send a notice to opers with snomask +l informing that the server + # is about to ping timeout. + pingwarning="15" + + # serverpingfreq: How often pings are sent between servers. + serverpingfreq="1m" + + # splitwhois: Whether to split private/secret channels from normal channels + # in WHOIS responses. Possible values for this are: + # 'no' - list all channels together in the WHOIS response regardless of type. + # 'split' - split private/secret channels to a separate WHOIS response numeric. + # 'splitmsg' - the same as split but also send a message explaining the split. + splitwhois="no" + + # defaultmodes: The modes to set on a channel when it is created. See + # https://docs.inspircd.org/3/channel-modes/ for a list of channel + # modes. If a prefix mode is included in this option it will be set on + # the user that created the channel. The example below sets channel + # modes n (noextmsg) and t (topiclock) and grants channel prefix mode + # o (op) to the channel creator. + defaultmodes="not" + + # xlinemessage: This is the text that is sent to a user when they are + # banned from the server. + xlinemessage="You're banned! Email irc@example.com with the ERROR line below for help." + + # allowzerolimit: If enabled then allow a limit of 0 to be set on channels. + # This is non-standard behaviour and should only be enabled if you need to + # link with servers running 2.0. Defaults to yes. + allowzerolimit="no" + + # modesinlist: If enabled then the current channel modes will be shown + # in the /LIST response. Defaults to yes. + modesinlist="no" + + # exemptchanops: Allows users with with a status mode to be exempt + # from various channel restrictions. Possible restrictions are: + # - anticaps Channel mode +B - blocks messages with too many capital + # letters (requires the anticaps module). + # - auditorium-see Permission required to see the full user list of + # a +u channel (requires the auditorium module). + # - auditorium-vis Permission required to be visible in a +u channel + # (requires the auditorium module). + # - blockcaps Channel mode +B - blocks messages with too many capital + # letters (requires the blockcaps module). + # - blockcolor Channel mode +c - blocks messages with formatting codes + # (requires the blockcolor module). + # - censor Channel mode +G - censors messages based on the network + # configuration (requires the censor module). + # - delaymsg Channel mode +d - blocks sending messages until specified + # seconds have passed since user join + # - filter Channel mode +g - blocks messages containing the given + # glob mask (requires the chanfilter module). + # - flood Channel mode +f - kicks (and bans) on text flood of a + # specified rate (requires the messageflood module). + # - nickflood Channel mode +F - blocks nick changes after a specified + # rate (requires the nickflood module). + # - noctcp Channel mode +C - blocks any CTCPs to the channel + # (requires the noctcp module). + # - nonick Channel mode +N - prevents users on the channel from + # changing nicks (requires the nonicks module). + # - nonotice Channel mode +T - blocks /NOTICEs to the channel + # (requires the nonotice module). + # - regmoderated Channel mode +M - blocks unregistered users from + # speaking (requires the services account module). + # - stripcolor Channel mode +S - strips formatting codes from + # messages (requires the stripcolor module). + # - topiclock Channel mode +t - limits changing the topic to (half)ops + # You can also configure this on a per-channel basis with a channel mode and + # even negate the configured exemptions below. + # See exemptchanops in modules.conf.example for more details. + exemptchanops="censor:o filter:o nickflood:o nonick:v regmoderated:o" + + # invitebypassmodes: This allows /INVITE to bypass other channel modes. + # (Such as +k, +j, +l, etc.) + invitebypassmodes="yes" + + # nosnoticestack: This prevents snotices from 'stacking' and giving you + # the message saying '(last message repeated X times)'. Defaults to no. + nosnoticestack="no"> + + +#-#-#-#-#-#-#-#-#-#-#-# PERFORMANCE CONFIGURATION #-#-#-#-#-#-#-#-#-#-# +# # + + + +#-#-#-#-#-#-#-#-#-#-#-# SECURITY CONFIGURATION #-#-#-#-#-#-#-#-#-#-#-# +# # + +