This commit is contained in:
Bryan Ramos 2023-06-06 00:27:11 -04:00
parent 0712b63194
commit cc18493707
26 changed files with 1203 additions and 799 deletions

12
homeConfig/home.nix Normal file
View file

@ -0,0 +1,12 @@
{ user, ... }:
{
home.stateVersion = "22.11";
programs.home-manager.enable = true;
home = {
username = user;
homeDirectory = "/home/${user}";
};
}

View file

@ -0,0 +1,92 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.alacritty;
in
{ options.modules.alacritty = { enable = mkEnableOption "alacritty"; };
config = mkIf cfg.enable {
programs.alacritty = {
enable = true;
settings = {
scrolling = {
history = 10000;
multiplier = 3;
};
window = {
opacity = 0.95;
};
colors = {
primary = {
background = 0x0d1117;
foreground = 0xb3b1ad;
};
normal = {
black = 0x484f58;
red = 0xff7b72;
green = 0x3fb950;
yellow = 0xd29922;
blue = 0x58a6ff;
magenta = 0xbc8cff;
cyan = 0x39c5cf;
white = 0xb1bac4;
};
bright = {
black = 0x6e7681;
red = 0xffa198;
green = 0x56d364;
yellow = 0xe3b341;
blue = 0x79c0ff;
magenta = 0xd2a8ff;
cyan = 0x56d4dd;
white = 0xf0f6fc;
};
};
font = {
normal = {
family = terminus-nerdfont;
style = Medium;
};
bold = {
family = terminus-nerdfont;
style = Bold;
};
italic = {
family = terminus-nerdfont;
style = Medium Italic;
};
bold_italic = {
family = terminus-nerdfont;
style = Bold Italic;
};
};
size = 14;
cursor = {
color = 0xffffff;
style = {
shape = Block;
blinking = Always;
blink-interval = 750;
};
};
};
};
home.packages = with pkgs; [
terminus-nerdfont
ranger
highlight
];
};
}

202
homeConfig/modules/bash.nix Normal file
View file

@ -0,0 +1,202 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.bash;
in
{ options.modules.bash = { enable = mkEnableOption "bash"; };
config = mkIf cfg.enable {
programs.bash = {
enable = true;
enableCompletion = true;
initExtra = ''
eval "$(direnv hook bash)"
is_ssh_session() {
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
return 0
else
return 1
fi
}
function set_ps1_prompt() {
local git_branch=""
local flake_icon=""
local cur_dir=""
if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
git_branch="$(git symbolic-ref --short HEAD 2>/dev/null)"
if [ $? -ne 0 ]; then
git_branch="$(git rev-parse --short HEAD 2>/dev/null)"
fi
git_branch=" \[\033[01;31m\]$git_branch󰘬:\[\033[00m\]"
if [ -f "$(git rev-parse --show-toplevel)/flake.nix" ]; then
# If it exists, set the flake icon and color it blue
flake_icon="\[\033[01;34m\] \[\033[00m\]"
fi
git_root="$(basename "$(git rev-parse --show-toplevel)")"
cur_dir=$(realpath --relative-to=$(git rev-parse --show-toplevel) .)
if [ "$cur_dir" == "." ]; then
cur_dir="\[\033[01;34m\] $git_root\[\033[00m\]"
else
cur_dir="\[\033[01;34m\] $git_root/$cur_dir\[\033[00m\]"
fi
else
cur_dir="\[\033[01;34m\]\w\[\033[00m\]"
fi
if [ -n "''${IN_NIX_SHELL:+x}" ]; then
PS1="$cur_dir\n$flake_icon\[\033[01;32m\]nixShell>$git_branch\[\033[00m\]"
else
if ! is_ssh_session; then
PS1="\n$cur_dir\n$flake_icon\[\033[01;32m\]>$git_branch\[\033[00m\]"
else
PS1="\n\[\033[01;34m\]\w\[\033[00m\]\n\[\033[01;32m\]\u@\h:\[\033[00m\] "
fi
fi
unset flake_icon
}
PROMPT_COMMAND="set_ps1_prompt; $PROMPT_COMMAND"
'';
profileExtra = ''
if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
exec sway
fi
'';
bashrcExtra = ''
function cdg() {
if [[ $1 == "--help" ]]; then
echo "A simple utility for navigating to the root of a git repo"
return 0
fi
# Check for invalid command
if [[ -n "$1" ]]; then
echo "Invalid command: $1. Try 'cdg --help'."
return 1
fi
local root_dir
root_dir=$(git rev-parse --show-toplevel 2>/dev/null)
local git_status=$?
if [ $git_status -ne 0 ]; then
echo "Error: Not a git repo."
return 1
fi
cd "$root_dir"
}
function ldv() {
if [[ $1 == "help" ]] || [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then
cat << EOF
ldv
A simple utility for setting up development environments effortlessly.
Commands:
ldv Start a preconfigured nix shell.
init Create a new dev template in the current working directory.
help Show available commands and options.
Contributions welcome: https://github.com/itme-brain/ldv
EOF
elif [[ $1 == "init" ]] || [[ $1 == "-i" ]] || [[ $1 == "--init" ]]; then
if [[ -e ./shell.nix ]] || [[ -e ./.envrc ]]; then
cat << EOF
Existing environment found.
Initialization cancelled.
EOF
return
fi
cat << EOF
Initializing a new environment...
Select an environment:
1. Web
2. Elixir
3. Haskell
EOF
read -p "Enter the number of your choice: " choice
case $choice in
1)
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/shells/web.nix -O shell.nix
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/utils/flake -O flake.nix
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/utils/envrc -O .envrc
direnv allow
;;
2)
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/shells/elixir.nix -O shell.nix
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/utils/flake -O flake.nix
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/utils/envrc -O .envrc
direnv allow
;;
3)
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/shells/haskell.nix -O shell.nix
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/utils/flake -O flake.nix
wget -q https://raw.githubusercontent.com/itme-brain/ldv/main/utils/envrc -O .envrc
direnv allow
;;
*)
echo "Invalid choice."
;;
esac
elif [[ -z $1 ]]; then
cat << EOF
Select an environment:
1. Web
2. Elixir
3. Haskell
EOF
read -p "Enter the number of your choice: " choice
case $choice in
1)
(nix develop github:itme-brain/ldv#web)
;;
2)
(nix develop github:itme-brain/ldv#elixir)
;;
3)
(nix develop github:itme-brain/ldv#haskell)
;;
# Add more cases here...
*)
echo "Invalid choice."
;;
esac
else
echo "Error: Invalid command. Try 'ldv --help'"
fi
}
'';
shellAliases = {
hmup = "home-manager switch --flake '$HOME/Documents/projects/nixos#bryan'";
nixup = "sudo nixos-rebuild switch --flake '$HOME/Documents/projects/nixos#socrates'";
};
};
services.gpg-agent.enableBashIntegration = true;
programs = {
direnv.nix-direnv.enable = true;
ripgrep.enable = true;
lsd = {
enable = true;
enableAliases = true;
};
};
};
}

View file

@ -0,0 +1,52 @@
{ pkgs, lib, config, user, ... }:
with lib;
let
cfg = config.modules.firefox;
in
{ options.modules.firefox = { enable = mkEnableOption "firefox"; };
config = mkIf cfg.enable {
programs.firefox = {
enabled = true;
profiles.${user} = {
isDefault = true;
search.default = "Startpage";
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
darkreader
keepassxc-browser
multi-account-containers
];
settings = {
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
"dom.security.https_only_mode" = true;
"media.peerconnection.enabled" = false;
"browser.formfill.enable" = false;
"privacy.sanitize.sanitizeOnShutdown" = true;
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.archive.enabled" = false;
"datareporting.healthreport.uploadEnabled" = false;
"browser.ping-centre.telemetry" = false;
"privacy.resistFingerprinting" = true;
"privacy.trackingprotection.fingerprinting.enabled" = true;
"privacy.trackingprotection.cryptomining.enabled" = true;
"geo.enabled" = false;
"privacy.trackingprotection.enabled" = true;
};
};
};
home.packages = [
google-chrome
(tor-browser-bundle-bin.override {
useHardenedMalloc = false; # NixOS bug requires this
})
];
};
}

View file

@ -0,0 +1,15 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.corn;
in
{ options.modules.corn = { enable = mkEnableOption "corn"; };
config = mkIf cfg.enable {
home.packages = with pkgs; [
trezor-suite trezorctl
electrum bisq-desktop
];
};
}

View file

@ -0,0 +1,12 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.PROGRAM;
in
{ options.modules.PROGRAM = { enable = mkEnableOption "PROGRAM"; };
config = mkIf cfg.enable {
};
}

View file

@ -0,0 +1,16 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.PROGRAM;
in
{ options.modules.PROGRAM = { enable = mkEnableOption "PROGRAM"; };
config = mkIf cfg.enable {
home.packages = with pkgs; [
spotify
discord
steam
];
};
}

View file

@ -0,0 +1,33 @@
{ pkgs, lib, config, ... }:
with lib;
let cfg = config.modules.git;
in
{
options.modules.git = { enable = mkEnableOption "git"; };
config = mkIf cfg.enable {
programs = {
git = {
enable = true;
userName = "Bryan Ramos";
userEmail = "bryan@ramos.codes";
signingKey = "F1F3466458452B2DF351F1E864D12BA95ACE1F2D";
extraConfig = {
init = { defaultBranch = "main"; };
};
ignores = [
"node_modules"
];
};
gh = {
enable = true;
settings.git_protocol = "ssh";
};
};
};
}

133
homeConfig/modules/gpg.nix Normal file
View file

@ -0,0 +1,133 @@
{ pkgs, lib, config, ... }:
with lib;
let cfg = config.modules.gpg;
in
{ options.modules.gpg = { enable = mkEnableOption "gpg"; };
config = mkIf cfg.enable {
programs.gpg = {
enable = true;
publicKeys."bryan@ramos.codes" = {
trust = 5;
text = ''
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
1hbflYLyMYo1BxGR6bPS9gJA2w==
=5uun
-----END PGP PUBLIC KEY BLOCK-----
'';
};
};
programs.ssh.enable = true;
services.gpg-agent = {
enable = true;
enableSshSupport = true;
};
};
}

273
homeConfig/modules/gui.nix Normal file
View file

@ -0,0 +1,273 @@
{ pkgs, lib, config, ... }:
with lib;
let cfg = config.modules.gui;
modifier = config.wayland.windowManager.sway.config.modifier;
in {
options.modules.gui = { enable = mkEnableOption "gui"; };
config = mkIf cfg.enable {
wayland.windowManager.sway = {
enable = true;
xwayland = true;
wrapperFeatures.gtk = true;
config = {
modifier = "Mod1";
menu = "\${pkgs.rofi-wayland}/bin/rofi -show drun -show-icons -drun-icon-theme Qogir -font 'Noto Sans 14'";
terminal = "\${pkgs.alacritty}/bin/alacritty";
startup = [{ command = "exec { exec alacritty -e sh -c 'neofetch; exec $SHELL'"; always = true; }];
input = {
keyboard = {
xkb_numlock = "enabled";
xkb_layout = "us";
};
pointer = {
accel_profile = "flat";
pointer_accel = "0.65";
};
};
bars.sway-bar = {
position = "top";
statusCommand = ''while :; do echo "$(free -h | awk '/^Mem/ {print $3}') '|' $(date +'%I:%M:%S %p') '|' $(date +'%m-%d-%Y')"; sleep 1; done'';
fonts = {
names = [ "Noto Sans" "Noto Emoji" "Noto Color Emoji" ];
size = 10.0;
};
colors.background = "#0A0E14";
colors.statusline = "#FFFFFF";
};
gaps = {
smartGaps = false;
inner = 10;
};
floating.border = 0;
window.border= 0;
keybindings = lib.mkOptionDefault {
"${modifier}+q" = "kill";
"Print" = "exec grim ~/Pictures/screenshot-$(date +'%Y%m%d-%H%M%S').png";
"Shift+Print" = "exec grim -g '$(slurp)'' ~/Pictures/screenshot-$(date +'%Y%m%d-%H%M%S').png";
"${modifier}+Print" = ''exec sh -c 'grim -g "$(swaymsg -t get_tree | jq -j '"'"'.. | select(.type?) | select(.focused).rect | "\(.x),\(.y) \(.width)x\(.height)"'"'"')" ~/Pictures/screenshot-$(date +'%Y%m%d-%H%M%S').png' '';
"${modifier}+Shift+f" = "exec alacritty -e ranger";
"${modifier}+Shift+d" = "exec emote";
};
extraOptions = [
"--unsupported-gpu"
"--my-next-gpu-wont-be-nvidia"
];
extraSessionCommands = ''
export _JAVA_AWT_WM_NONREPARENTING=1
'';
};
};
gtk = {
enable = true;
theme.package = pkgs.juno-theme;
theme.name = "Juno-ocean";
iconTheme.package = pkgs.qogir-icon-theme;
iconTheme.name = "Qogir";
};
programs.btop.enable = true;
fonts.fontconfig.enable = true;
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland;
location = "center";
terminal = "\${pkgs.alacritty}/bin/alacritty";
theme = {
"*" = {
nord0 = mkLiteral "#2e3440";
nord1 = mkLiteral "#3b4252";
nord2 = mkLiteral "#434c5e";
nord3 = mkLiteral "#4c566a";
nord4 = mkLiteral "#d8dee9";
nord5 = mkLiteral "#e5e9f0";
nord6 = mkLiteral "#eceff4";
nord7 = mkLiteral "#8fbcbb";
nord8 = mkLiteral "#88c0d0";
nord9 = mkLiteral "#81a1c1";
nord10 = mkLiteral "#5e81ac";
nord11 = mkLiteral "#bf616a";
nord12 = mkLiteral "#d08770";
nord13 = mkLiteral "#ebcb8b";
nord14 = mkLiteral "#a3be8c";
nord15 = mkLiteral "#b48ead";
spacing = 2;
background-color = mkLiteral "var(nord1)";
background = mkLiteral "var(nord1)";
foreground = mkLiteral "var(nord4)";
normal-background = mkLiteral "var(background)";
normal-foreground = mkLiteral "var(foreground)";
alternate-normal-background = mkLiteral "var(background)";
alternate-normal-foreground = mkLiteral "var(foreground)";
selected-normal-background = mkLiteral "var(nord8)";
selected-normal-foreground = mkLiteral "var(background)";
active-background = mkLiteral "var(background)";
active-foreground = mkLiteral "var(nord10)";
alternate-active-background = mkLiteral "var(background)";
alternate-active-foreground = mkLiteral "var(nord10)";
selected-active-background = mkLiteral "var(nord10)";
selected-active-foreground = mkLiteral "var(background)";
urgent-background = mkLiteral "var(background)";
urgent-foreground = mkLiteral "var(nord11)";
alternate-urgent-background = mkLiteral "var(background)";
alternate-urgent-foreground = mkLiteral "var(nord11)";
selected-urgent-background = mkLiteral "var(nord11)";
selected-urgent-foreground = mkLiteral "var(background)";
};
element = {
padding = mkLiteral "0px 0px 0px 7px";
spacing = mkLiteral "5px";
border = 0;
cursor = mkLiteral "pointer";
};
"element normal.normal" = {
background-color = mkLiteral "var(normal-background)";
text-color = mkLiteral "var(normal-foreground)";
};
"element normal.urgent" = {
background-color = mkLiteral "var(urgent-background)";
text-color = mkLiteral "var(urgent-foreground)";
};
"element normal.active" = {
background-color = mkLiteral "var(active-background)";
text-color = mkLiteral "var(active-foreground)";
};
"element selected.normal" = {
background-color = mkLiteral "var(selected-normal-background)";
text-color = mkLiteral "var(selected-normal-foreground)";
};
"element selected.urgent" = {
background-color = mkLiteral "var(selected-urgent-background)";
text-color = mkLiteral "var(selected-urgent-foreground)";
};
"element selected.active" = {
background-color = mkLiteral "var(selected-active-background)";
text-color = mkLiteral "var(selected-active-foreground)";
};
"element alternate.normal" = {
background-color = mkLiteral "var(alternate-normal-background)";
text-color = mkLiteral "var(alternate-normal-foreground)";
};
"element alternate.urgent" = {
background-color = mkLiteral "var(alternate-urgent-background)";
text-color = mkLiteral "var(alternate-urgent-foreground)";
};
"element alternate.active" = {
background-color = mkLiteral "var(alternate-active-background)";
text-color = mkLiteral "var(alternate-active-foreground)";
};
"element-text" = {
background-color = mkLiteral "rgba(0, 0, 0, 0%)";
text-color = mkLiteral "inherit";
highlight = mkLiteral "inherit";
cursor = mkLiteral "inherit";
};
"element-icon" = {
background-color = mkLiteral "rgba(0, 0, 0, 0%)";
size = mkLiteral "1.0000em";
text-color = mkLiteral "inherit";
cursor = mkLiteral "inherit";
};
window = {
padding = 0;
border = 0;
background-color = mkLiteral "var(background)";
};
mainbox = {
padding = 0;
border = 0;
};
message = {
margin = mkLiteral "0px 7px";
};
textbox = {
text-color = mkLiteral "var(foreground)";
};
listview = {
margin = mkLiteral "0px 0px 5px";
scrollbar = true;
spacing = mkLiteral "2px";
fixed-height = 0;
};
scrollbar = {
padding = 0;
handle-width = mkLiteral "14px";
border = 0;
handle-color = mkLiteral "var(nord3)";
};
button = {
spacing = 0;
text-color = mkLiteral "var(normal-foreground)";
cursor = mkLiteral "pointer";
};
"button selected" = {
background-color = mkLiteral "var(selected-normal-background)";
text-color = mkLiteral "var(selected-normal-foreground)";
};
inputbar = {
padding = mkLiteral "7px";
margin = mkLiteral "7px";
spacing = 0;
text-color = mkLiteral "var(normal-foreground)";
background-color = mkLiteral "var(nord3)";
children = [ "entry" ];
};
entry = {
spacing = 0;
cursor = mkLiteral "text";
text-color = mkLiteral "var(normal-foreground)";
background-color = mkLiteral "var(nord3)";
};
};
};
home.packages = [
xdg-utils
grim
slurp
imv
gimp
evince
noto-fonts
noto-fonts-cjk
emote
emojione
];
};
}

220
homeConfig/modules/nvim.nix Normal file
View file

@ -0,0 +1,220 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.neovim;
github-theme = pkgs.vimUtils.buildVimPlugin {
name = "github-theme";
src = pkgs.fetchFromGithub {
owner = "projekt0n";
repo = "github-nvim-theme";
rev = "ea713c37691b2519f56cd801a2330bdf66393d0f";
sha256 = "0cwr3b5r2ac7aizxmwb3mlhdc2sh0pw670vcwps79x9jp52yrj2y";
};
};
LSPs = with pkgs; [
nil nixfmt marksman
sumneko-lua-language-server stylua
haskell-language-server hlint
];
LSPs' = with pkgs.nodePackages; [
vscode-langservers-extracted typescript-language-server eslint
bash-language-server diagnostic-languageserver
pyright purescript-language-server
];
in
{ options.modules.neovim = { enable = mkEnableOption "neovim"; };
config = mkIf cfg.enable {
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
plugins = with pkgs.vimPlugins; [
{
plugin = github-theme;
config = ''
lua << EOF
vim.cmd('colorscheme github_dark_high_contrast')
EOF
'';
}
{ plugin = lazygit.nvim; }
{
plugin = LazyVim;
config = ''
lua << EOF
return {
{'williamboman/mason.nvim', enabled = false },
{'williamboman/mason-lspconfig.nvim', enabled = false },
{'nvim-treesitter/nvim-treesitter', enabled = false },
}
EOF
'';
}
{
plugin = lsp-zero-nvim;
config = ''
lua << EOF
branch = 'v2.x'
requires = {
{'neovim/nvim-lspconfig'},
{'hrsh7th/nvim-cmp'},
{'hrsh7th/cmp-nvim-lsp'},
{'L3MON4D3/LuaSnip'},
}
'';
}
{
plugin = nvim-treesitter.withAllGrammars;
config = ''
lua << EOF
require'nvim-treesitter.configs'.setup {
highlight = {
enable = true,
},
}
EOF
'';
}
];
extraLuaConfig = ''
lua << EOF
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.o.clipboard = "unnamedplus"
EOF
'';
generatedConfigs = {
lua = ''
require("config.lazy")
local lsp = require("lsp-zero").preset({})
lsp.on_attach(function(client, bufnr)
lsp.default_keymaps({ buffer = bufnr })
end)
lsp.setup_servers({
"tsserver",
"eslint",
"hls",
"pyright",
"nil_ls",
"cssls",
"html",
"jsonls",
"diagnosticls",
"lua_ls",
"marksman",
"purescriptls",
"tailwindcss",
"bashls",
})
require("lspconfig").lua_ls.setup(lsp.nvim_lua_ls())
lsp.setup()
local cmp = require("cmp")
cmp.setup({
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
sources = {
{ name = "nvim_lsp" },
{ name = "luasnip" },
},
})
vim.cmd([[
au BufRead,BufNewFile *.purs set filetype=purescript
]])
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
end
local luasnip = require("luasnip")
cmp.setup({
enabled = function()
-- disable completion in comments
local context = require("cmp.config.context")
-- keep command mode completion enabled when cursor is in a comment
if vim.api.nvim_get_mode().mode == "c" then
return true
else
return not context.in_treesitter_capture("comment") and not context.in_syntax_group("Comment")
end
end,
mapping = {
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
-- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
-- they way you will only jump inside the snippet region
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
["<CR>"] = cmp.mapping({
i = function(fallback)
if cmp.visible() and cmp.get_active_entry() then
cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false })
else
fallback()
end
end,
s = cmp.mapping.confirm({ select = true }),
c = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }),
}),
},
})
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
-- Disable virtual_text
virtual_text = false,
})
require("notify").setup({
background_colour = "#000000",
})
'';
};
extraPackages = LSPs ++ LSPs';
};
};
}

View file

@ -0,0 +1,14 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.security;
in
{ options.modules.security = { enable = mkEnableOption "security"; };
config = mkIf cfg.enable {
home.packages = [
keepassxc wireguard-tools ipscan
];
};
}

View file

@ -0,0 +1,22 @@
{ pkgs, lib, config, ... }:
with lib;
let
cfg = config.modules.utils;
in
{ options.modules.utils = { enable = mkEnableOption "utils"; };
config = mkIf cfg.enable {
services.syncthing.enable = true;
home.packages = with pkgs; [
wget curl tree neofetch
unzip fping calc qrendcode
fd pkg-config pciutils
neofetch mdbook rsync
android-studio docker
gcc gnumake
];
};
}