chore: import nixos files

This commit is contained in:
Michael Mandl 2024-07-09 21:58:33 +02:00
parent 5ea6b4bd06
commit 6823f37d6b
Signed by: mandlm
GPG key ID: 4AA25D647AA54CC7
42 changed files with 1520 additions and 60 deletions

13
bat.nix Normal file
View file

@ -0,0 +1,13 @@
{ theme, ... }:
let
theme_name = "Solarized (${theme})";
in
{
programs = {
bat = {
enable = true;
config.theme = theme_name;
};
};
}

8
carapace.nix Normal file
View file

@ -0,0 +1,8 @@
{ ... }:
{
programs.carapace = {
enable = true;
enableZshIntegration = true;
};
}

11
direnv.nix Normal file
View file

@ -0,0 +1,11 @@
{ ... }:
{
programs = {
direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
};
};
}

125
email.nix Normal file
View file

@ -0,0 +1,125 @@
{ config, lib, pkgs, ... }:
{
home.packages = [ pkgs.libsecret ];
programs.msmtp.enable = true;
programs.mbsync.enable = true;
programs.neomutt = {
enable = true;
sidebar.enable = true;
vimKeys = true;
macros = [
{
action = "<shell-escape>mbsync -all<enter>";
key = "S";
map = [ "index" ];
}
];
};
accounts.email = {
maildirBasePath = "${config.xdg.dataHome}/mail";
accounts = {
molez = rec {
primary = true;
realName = "Michael Mandl";
address = "mandlm@molez.net";
userName = address;
passwordCommand = "secret-tool lookup email mandlm@molez.net";
imap = {
host = "mail.molez.net";
port = 993;
tls.enable = true;
};
smtp = {
host = "mail.molez.net";
port = 465;
tls.enable = true;
};
gpg = {
key = "0x4AA25D647AA54CC7";
signByDefault = true;
};
msmtp.enable = true;
mbsync = {
enable = true;
create = "both";
expunge = "both";
};
neomutt.enable = true;
};
swp = {
realName = "Michael Mandl";
address = "mandl@vi-bim.de";
userName = "mandl";
passwordCommand = "secret-tool lookup email mandl@vi-bim.de";
imap = {
host = "swpmail.softwareparadies.de";
port = 993;
tls.enable = true;
};
smtp = {
host = "swpmail.softwareparadies.de";
port = 465;
tls.enable = true;
};
gpg = {
key = "0x4E60F44227F611B4 ";
signByDefault = true;
};
signature = {
showSignature = "append";
text = ''
--
Mit freundlichen Grüßen
Michael Mandl
Entwicklung
------------------------------------------
swp software systems GmbH & Co. KG
Königsbrücker Straße 124
01099 Dresden
Tel: 0351-492850
Fax: 0351-4928550
www: https://www.vi-bim.de
Kennen Sie schon unsere FAQ-Wissensdatenbank? Einfach hier klicken:
https://faq.vi-bim.de
Unsere Datenschutzerklärung finden Sie unter https://datenschutz.vi-bim.de
Registergericht: Amtsgericht Dresden HRA 3008
persönlich haftender Gesellschafter:
swp Beteiligungs GmbH
Registergericht: Amtsgericht Dresden HRB 15 20 9
Geschäftsführer: Holger Schönemann, Stefan Urlberger
'';
};
msmtp.enable = true;
mbsync = {
enable = true;
create = "both";
expunge = "both";
};
neomutt.enable = true;
};
};
};
}

9
firefox.nix Normal file
View file

@ -0,0 +1,9 @@
{ ... }:
{
programs = {
firefox = {
enable = true;
};
};
}

48
flake.lock Normal file
View file

@ -0,0 +1,48 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1720327769,
"narHash": "sha256-kAsg3Lg4YKKpGw+f1W2s5hzjP8B0y/juowvjK8utIag=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "6b7ce96f34b324e4e104abc30d06955d216bac71",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1720418205,
"narHash": "sha256-cPJoFPXU44GlhWg4pUk9oUPqurPlCFZ11ZQPk21GTPU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "655a58a72a6601292512670343087c2d75d859c1",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

View file

@ -1,8 +1,7 @@
{ {
description = "Home Manager configuration of mandlm"; description = "Home Manager configuration";
inputs = { inputs = {
# Specify the source of Home Manager and Nixpkgs.
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
@ -14,16 +13,22 @@
let let
system = "x86_64-linux"; system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
in { in
homeConfigurations."mandlm" = home-manager.lib.homeManagerConfiguration { {
homeConfigurations = {
"mandlm@xps" = home-manager.lib.homeManagerConfiguration {
inherit pkgs; inherit pkgs;
# Specify your home configuration modules here, for example, modules = [
# the path to your home.nix. ./home.nix
modules = [ ./home.nix ]; ./xps.nix
];
# Optionally use extraSpecialArgs extraSpecialArgs = {
# to pass through arguments to home.nix username = "mandlm";
theme = "dark";
};
};
}; };
}; };
} }

10
fzf.nix Normal file
View file

@ -0,0 +1,10 @@
{ ... }:
{
programs = {
fzf = {
enable = true;
enableZshIntegration = true;
};
};
}

71
git.nix Normal file
View file

@ -0,0 +1,71 @@
{ ... }:
{
programs = {
git = {
enable = true;
extraConfig = {
core.editor = "nvim";
diff.external = "difft --background light";
diff.tool = "difftastic";
diff.ignoreSubmodules = "none";
difftool.difftastic.cmd = "difft --background light \"$LOCAL\" \"$REMOTE\"";
difftool.prompt = false;
fetch.writeCommitGraph = true;
fetch.recurseSubmodules = true;
format.pretty = "format:%C(yellow)%h %Cblue%>(12)%ad %C(red)%G? %Cgreen%<(7,trunc)%aN%Cred%d %Creset%s";
init.defaultBranch = "main";
log.date = "relative";
merge.ff = false;
merge.tool = "nvim";
mergetool.nvim.cmd = "nvim -f -c \"Gdiffsplit!\" \"$MERGED\"";
mergetool.prompt = false;
pager.difftool = true;
pull.rebase = true;
push.recurseSubmodules = "on-demand";
rebase.autostash = true;
rerere.enabled = true;
status.submoduleSummary = true;
submodule.recurse = true;
user.private.email = "mandlm@molez.net";
user.private.name = "Michael Mandl";
user.private.signingkey = "4AA25D647AA54CC7";
user.swp.email = "mandl@vi-bim.de";
user.swp.name = "Michael Mandl";
user.swp.signingkey = "4E60F44227F611B4";
worktree.guessRemote = true;
};
aliases = {
identity = ''! git config user.name "$(git config user.$1.name)"; git config user.email "$(git config user.$1.email)"; git config user.signingkey "$(git config user.$1.signingkey)"; git config commit.gpgsign "true"; : '';
clone-worktree = ''! mkdir $2; git clone $1 $2/.base; BRANCH=`git -C $2/.base symbolic-ref --short HEAD`; echo "branch is $BRANCH"; git -C $2/.base checkout --detach HEAD; git -C $2/.base worktree add ../$BRANCH; :'';
graph = "log --graph --all --max-count 32";
};
ignores = [
".env"
".direnv"
"*.swp"
];
};
};
}

21
gpg/default.nix Normal file
View file

@ -0,0 +1,21 @@
{ pkgs, ... }:
{
services.gpg-agent = {
enable = true;
enableZshIntegration = true;
pinentryPackage = pkgs.pinentry-gnome3;
enableSshSupport = true;
sshKeys = [ "1F937AC8F77ED74CE24EAAE79B5601F73C6D115F" ];
};
programs.gpg = {
enable = true;
mutableKeys = true;
mutableTrust = true;
publicKeys = [{
source = ./pubring.asc;
trust = "ultimate";
}];
};
}

99
gpg/pubring.asc Normal file
View file

@ -0,0 +1,99 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
iL8jv/hUCyjfKBN5Qa14
=dpaN
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -1,56 +1,41 @@
{ config, pkgs, ... }: { pkgs, username, ... }:
{ {
# Home Manager needs a bit of information about you and the paths it should home.username = "${username}";
# manage. home.homeDirectory = "/home/${username}";
home.username = "mandlm";
home.homeDirectory = "/home/mandlm";
# This value determines the Home Manager release that your configuration is
# compatible with. This helps avoid breakage when a new Home Manager release
# introduces backwards incompatible changes.
#
# You should not change this value, even if you update Home Manager. If you do
# want to update the value, then make sure to first check the Home Manager
# release notes.
home.stateVersion = "24.05"; # Please read the comment before changing. home.stateVersion = "24.05"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your home.packages = with pkgs; [
# environment. eza
home.packages = [ jq
# # Adds the 'hello' command to your environment. It prints a friendly htop
# # "Hello, world!" when run. ripgrep
# pkgs.hello pavucontrol
gnumake
# # It is sometimes useful to fine-tune packages, for example, by applying unzip
# # overrides. You can do that directly here, just don't forget the gcc
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of thunderbird
# # fonts? keepassxc
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) tree
light
# # You can also create simple shell scripts directly inside your element-desktop
# # configuration. For example, this adds a command 'my-hello' to your difftastic
# # environment: darktable
# (pkgs.writeShellScriptBin "my-hello" '' kubectl
# echo "Hello, ${config.home.username}!" kubectx
# '') simple-scan
calibre
libreoffice
gthumb
gimp
evince
screen
inkscape
chromium
xclip
]; ];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file = {
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
# Home Manager can also manage your environment variables through # Home Manager can also manage your environment variables through
# 'home.sessionVariables'. These will be explicitly sourced when using a # 'home.sessionVariables'. These will be explicitly sourced when using a
# shell provided by Home Manager. If you don't want to manage your shell # shell provided by Home Manager. If you don't want to manage your shell
@ -67,10 +52,24 @@
# #
# /etc/profiles/per-user/mandlm/etc/profile.d/hm-session-vars.sh # /etc/profiles/per-user/mandlm/etc/profile.d/hm-session-vars.sh
# #
home.sessionVariables = { home.sessionVariables = { };
# EDITOR = "emacs";
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true; programs.home-manager.enable = true;
imports = [
./bat.nix
./carapace.nix
./direnv.nix
./firefox.nix
./fzf.nix
./git.nix
./gpg
./kitty.nix
./neovim
./nextcloud.nix
./starship.nix
./sway
./zoxide.nix
./zsh.nix
];
} }

19
kitty.nix Normal file
View file

@ -0,0 +1,19 @@
{ theme, ... }:
let
theme_name = if theme == "light" then "Solarized Light" else "Solarized Dark";
in
{
programs = {
kitty = {
enable = true;
theme = theme_name;
font = {
name = "FiraCode";
};
settings = {
tab_bar_style = "powerline";
};
};
};
}

3
neovim/auto-session.lua Normal file
View file

@ -0,0 +1,3 @@
require("auto-session").setup {
log_level = "error",
}

1
neovim/commands.lua Normal file
View file

@ -0,0 +1 @@
vim.api.nvim_create_user_command("BufOnly", "%bd|e#|bd#", {})

1
neovim/comment.lua Normal file
View file

@ -0,0 +1 @@
require('Comment').setup({})

35
neovim/dap.lua Normal file
View file

@ -0,0 +1,35 @@
local dap = require("dap")
local dapui = require("dapui")
dapui.setup()
vim.fn.sign_define("DapBreakpoint", { text = "🔴", texthl = "", linehl = "", numhl = "" })
-- debugging keymaps
vim.keymap.set("n", "<F5>", dap.continue, { noremap = true, silent = true })
vim.keymap.set("n", "<F9>", dap.toggle_breakpoint, { noremap = true, silent = true })
vim.keymap.set("n", "<F10>", dap.step_over, { noremap = true, silent = true })
vim.keymap.set("n", "<F11>", dap.step_into, { noremap = true, silent = true })
vim.keymap.set("n", "<S-F11>", dap.step_out, { noremap = true, silent = true })
vim.keymap.set("n", "<F23>", dap.step_out, { noremap = true, silent = true }) -- <Shift-F11> in kitty
vim.keymap.set("n", "<M-k>", dapui.eval, { noremap = true, silent = true })
-- trigger auto-completion in repl
vim.cmd([[
augroup TriggerDapReplAutoCompletion
autocmd!
autocmd FileType dap-repl lua require("dap.ext.autocompl").attach()
augroup END
]])
dap.listeners.after.event_initialized["dapui_config"] = function()
dapui.open()
end
dap.listeners.before.event_terminated["dapui_config"] = function()
dapui.close()
end
dap.listeners.before.event_exited["dapui_config"] = function()
dapui.close()
end

167
neovim/default.nix Normal file
View file

@ -0,0 +1,167 @@
{ pkgs, theme, ... }:
{
# symlink for a stable path
home.file.".vscode-extensions/vscode-lldb".source = pkgs.vscode-extensions.vadimcn.vscode-lldb;
programs = {
neovim = {
enable = true;
package = pkgs.neovim-unwrapped;
defaultEditor = true;
plugins = with pkgs.vimPlugins; [
# theme
nvim-solarized-lua
delimitMate
vim-bbye
ansible-vim
# ui
dressing-nvim
# session handling
project-nvim
auto-session
# escape handling
better-escape-nvim
nvim-treesitter.withAllGrammars
markdown-preview-nvim # use({ "iamcco/markdown-preview.nvim", run = ":call mkdp#util#install()" })
toggleterm-nvim
nvim-notify
comment-nvim
lualine-nvim
tabline-nvim
indent-blankline-nvim
plenary-nvim
vim-illuminate
registers-nvim
vim-surround
editorconfig-nvim
# git
gitsigns-nvim
vim-fugitive
vim-flog
git-blame-nvim
nvim-web-devicons # used by diffview-nvim
# snippets
friendly-snippets
luasnip
# auto-completion
nvim-cmp
cmp-nvim-lsp
cmp-buffer
cmp-path
cmp-cmdline
cmp-nvim-lua
cmp_luasnip
cmp-calc
cmp-nvim-lsp-signature-help
# telescope
telescope-nvim
telescope-fzf-native-nvim
telescope-ui-select-nvim
# LSP
nvim-lspconfig
lsp-status-nvim
rustaceanvim
neodev-nvim
null-ls-nvim
lsp_lines-nvim
lsp-inlayhints-nvim
# debugging
nvim-dap
nvim-dap-ui
# neorg
neorg
neorg-telescope
];
withNodeJs = true;
extraPackages = with pkgs; [
# language servers
lua-language-server
terraform-ls
tflint
bash-language-server
nodePackages.dockerfile-language-server-nodejs
nodePackages.eslint_d
nodePackages.prettier
nodePackages.typescript
nodePackages.typescript-language-server
nodePackages.vscode-langservers-extracted
nodePackages.yaml-language-server
lldb
vscode-extensions.vadimcn.vscode-lldb
marksman
clang-tools
cmake-language-server
texlab
nixd
nixpkgs-fmt
];
extraLuaPackages = luaPackages: [
luaPackages.lua-utils-nvim
luaPackages.pathlib-nvim
];
extraConfig = ''
lua << EOF
vim.o.guifont = "DejaVu Sans Mono:h10"
if vim.g.neovide then
vim.g.neovide_fullscreen = true
vim.g.neovide_cursor_animation_length = 0.01
vim.g.neovide_cursor_trail_length = 0.01
end
${builtins.readFile ./keymaps.lua }
${builtins.readFile ./options.lua }
${builtins.readFile ./commands.lua }
${builtins.readFile ./treesitter.lua }
${builtins.readFile ./lspconfig.lua }
${builtins.readFile ./auto-session.lua }
${builtins.readFile ./toggleterm.lua }
${builtins.readFile ./notify.lua }
${builtins.readFile ./comment.lua }
${builtins.readFile ./lualine.lua }
${builtins.readFile ./tabline.lua }
${builtins.readFile ./indent-blankline.lua }
${builtins.readFile ./gitsigns.lua }
${builtins.readFile ./luasnip.lua }
${builtins.readFile ./nvim-cmp.lua }
${builtins.readFile ./telescope.lua }
${builtins.readFile ./themes.lua }
vim.opt.background = '${theme}'
${builtins.readFile ./project-nvim.lua }
${builtins.readFile ./dap.lua }
${builtins.readFile ./neorg.lua }
vim.g.gitblame_date_format = "%r"
-- setup illuminate highlight groups
vim.api.nvim_set_hl(0, "IlluminatedWordText", { bold = true })
vim.api.nvim_set_hl(0, "IlluminatedWordRead", { link = "IlluminatedWordText" })
vim.api.nvim_set_hl(0, "IlluminatedWordWrite", { link = "IlluminatedWordText" })
EOF
'';
};
};
}

1
neovim/gitsigns.lua Normal file
View file

@ -0,0 +1 @@
require('gitsigns').setup()

View file

@ -0,0 +1,5 @@
require("ibl").setup {
indent = {
char = "",
},
}

69
neovim/keymaps.lua Normal file
View file

@ -0,0 +1,69 @@
local function nnoremap(key, command)
vim.api.nvim_set_keymap("n", key, command, { noremap = true })
end
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- Move around windows
nnoremap("<C-h>", ":wincmd h<CR>")
nnoremap("<C-j>", ":wincmd j<CR>")
nnoremap("<C-k>", ":wincmd k<CR>")
nnoremap("<C-l>", ":wincmd l<CR>")
-- Switch buffers
nnoremap("<C-PageDown>", ":TablineBufferNext<CR>")
nnoremap("<C-PageUp>", ":TablineBufferPrevious<CR>")
-- fugitive
nnoremap("<leader>g", ":0Git<CR>")
-- vim-flog
nnoremap("<leader>G", ":Flog -all -date=relative -open-cmd=new<CR>")
-- telescope
local telescope = require("telescope.builtin")
local telescope_themes = require("telescope.themes")
local telescope_projects = require("telescope").extensions.projects
local function map_telescope(key, telescope_function)
vim.api.nvim_set_keymap("n", key, "", {
noremap = true,
callback = function()
local theme = telescope_themes.get_dropdown({ layout_config = { width = 0.9 } })
telescope_function(theme)
end,
})
end
map_telescope("<leader>ff", telescope.find_files)
map_telescope("<leader>fb", telescope.buffers)
map_telescope("<leader>fg", telescope.git_files)
map_telescope("<leader>fp", telescope_projects.projects)
map_telescope("<leader>fs", telescope.lsp_document_symbols)
map_telescope("<leader>fS", telescope.lsp_dynamic_workspace_symbols)
map_telescope("<C-f>", telescope.grep_string)
map_telescope("<C-g>", telescope.live_grep)
-- terminal
vim.api.nvim_create_autocmd("TermOpen", {
pattern = "term://*",
callback = function()
local opts = { noremap = true }
vim.api.nvim_buf_set_keymap(0, 't', '<esc>', [[<C-\><C-n>]], opts)
vim.api.nvim_buf_set_keymap(0, 't', '<C-h>', [[<C-\><C-n><C-W>h]], opts)
vim.api.nvim_buf_set_keymap(0, 't', '<C-j>', [[<C-\><C-n><C-W>j]], opts)
vim.api.nvim_buf_set_keymap(0, 't', '<C-k>', [[<C-\><C-n><C-W>k]], opts)
vim.api.nvim_buf_set_keymap(0, 't', '<C-l>', [[<C-\><C-n><C-W>l]], opts)
end,
desc = "Map terminal esc and window switch keys",
})
-- buffer closing
nnoremap("gq", ":Bdelete<CR>")
-- toggle search highlighting
vim.cmd('nnoremap <expr> * v:hlsearch ? ":nohlsearch<cr>" : "*"')
-- insert-map jj/jk to escape
require("better_escape").setup()

184
neovim/lspconfig.lua Normal file
View file

@ -0,0 +1,184 @@
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
local on_attach = function(client, bufnr)
local function nnoremap(key, command)
vim.keymap.set("n", key, command, { noremap = true, silent = true, buffer = bufnr })
end
local function format_buffer()
vim.lsp.buf.format({
timeout_ms = 3000,
async = false,
filter = function(formatter)
return formatter.name ~= "tsserver" and formatter.name ~= "volar"
end
})
end
require("lsp-inlayhints").on_attach(client, bufnr)
local telescope = require("telescope.builtin")
nnoremap("gD", vim.lsp.buf.declaration)
nnoremap("gd", telescope.lsp_definitions)
nnoremap("gt", telescope.lsp_type_definitions)
nnoremap("gi", telescope.lsp_implementations)
nnoremap("gr", telescope.lsp_references)
nnoremap("K", vim.lsp.buf.hover)
nnoremap("<leader>rn", vim.lsp.buf.rename)
nnoremap("<leader>ca", vim.lsp.buf.code_action)
nnoremap("<leader>f", format_buffer)
nnoremap("<leader>d", telescope.diagnostics)
nnoremap("<leader>D", require("lsp_lines").toggle)
nnoremap("<C-p>", vim.diagnostic.goto_prev)
nnoremap("<C-n>", vim.diagnostic.goto_next)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = format_buffer,
})
end
end
require("lsp-inlayhints").setup({})
local lsp_status = require("lsp-status")
lsp_status.config({
current_function = false,
show_filename = false,
diagnostics = true,
status_symbol = "",
})
lsp_status.register_progress()
-- setup lua language server for init.nvim and nvim plugin development
require("neodev").setup({
override = function(root_dir, options)
if require("neodev.util").has_file(root_dir, "/etc/nixos") then
options.enabled = true
options.plugins = true
end
end,
})
local capabilities = require("cmp_nvim_lsp").default_capabilities(lsp_status.capabilities)
local servers = {
["bashls"] = {},
["clangd"] = {},
["cmake"] = {},
["dockerls"] = {},
["eslint"] = {},
["html"] = {},
["jsonls"] = {},
["lua_ls"] = {
Lua = {
runtime = {
version = "LuaJIT",
},
diagnostics = {
globals = { "vim" },
},
workspace = {
library = vim.api.nvim_get_runtime_file("", true),
},
telemetry = {
enable = false,
},
},
},
["marksman"] = {},
["nixd"] = {},
["pylsp"] = {
pylsp = {
plugins = {
pycodestyle = {
maxLineLength = 120
}
}
}
},
["pyright"] = {},
["terraformls"] = {},
["texlab"] = {},
["tflint"] = {},
["tsserver"] = {},
["yamlls"] = {
yaml = {
keyOrdering = false
}
},
}
local lspconfig = require("lspconfig")
for lsp, settings in pairs(servers) do
lspconfig[lsp].setup({
settings = settings,
on_attach = on_attach,
capabilities = capabilities,
})
end
-- setup rustaceanvim
vim.g.rustaceanvim = {
server = {
on_attach = on_attach,
settings = {
["rust-analyzer"] = {
cargo = {
loadOutDirsFromCheck = true,
},
checkOnSave = { command = "clippy" },
procMacro = {
enable = true,
},
},
},
},
}
-- setup null-ls for markdown formatting
local null_ls = require("null-ls")
null_ls.setup({
sources = {
null_ls.builtins.formatting.prettier,
null_ls.builtins.diagnostics.tsc,
},
on_attach = on_attach,
})
-- setup lsp_lines
require("lsp_lines").setup()
-- setup vim diagnostics
vim.diagnostic.config({
virtual_text = false,
signs = true,
update_in_insert = true,
underline = true,
severity_sort = true,
float = {
border = "rounded",
source = "always",
header = "",
prefix = "",
},
})
-- setup diagnostics signs
local diagnostics_signs = { Error = "", Warn = "", Hint = "", Info = "" }
for type, icon in pairs(diagnostics_signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
end
-- setup volar
lspconfig["volar"].setup({
filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue', 'json' },
on_attach = on_attach,
capabilities = capabilities,
})

7
neovim/lualine.lua Normal file
View file

@ -0,0 +1,7 @@
require('lualine').setup({
options = { globalstatus = true },
sections = {
lualine_c = { { "filename", path = 1 }, "require('lsp-status').status()" }
},
extensions = { "toggleterm" }
})

1
neovim/luasnip.lua Normal file
View file

@ -0,0 +1 @@
require("luasnip.loaders.from_vscode").lazy_load()

16
neovim/neorg.lua Normal file
View file

@ -0,0 +1,16 @@
local neorg = require("neorg")
neorg.setup({
load = {
["core.defaults"] = {},
["core.concealer"] = {},
["core.dirman"] = {
config = {
workspaces = {
notes = "~/notes",
},
default_workspace = "notes",
},
},
}
})

2
neovim/notify.lua Normal file
View file

@ -0,0 +1,2 @@
require("notify").setup({ stages = "fade" })
vim.notify = require("notify")

87
neovim/nvim-cmp.lua Normal file
View file

@ -0,0 +1,87 @@
local has_words_before = function()
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 cmp = require("cmp")
local luasnip = require("luasnip")
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end
},
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "nvim_lsp_signature_help" },
{ name = "luasnip" },
{ name = "path" },
{ name = "buffer" },
{ name = "nvim-lua" },
{ name = "calc" },
}),
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete({}),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
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" }),
}),
experimental = { ghost_text = true },
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
formatting = {
fields = { "menu", "abbr", "kind" },
format = function(entry, item)
local menu_icon = {
nvim_lsp = "λ",
luasnip = "",
buffer = "Ω",
path = "🖿",
}
item.menu = menu_icon[entry.source.name]
return item
end,
},
})
-- `/` cmdline setup.
cmp.setup.cmdline("/", {
sources = cmp.config.sources(
{ name = "buffer" }
)
})
-- `:` cmdline setup.
cmp.setup.cmdline(":", {
sources = cmp.config.sources(
{ name = "path" },
{ name = "cmdline" }
)
})

61
neovim/options.lua Normal file
View file

@ -0,0 +1,61 @@
-- termguicolors
vim.opt.termguicolors = true
-- line numbers
vim.opt.number = true
-- tabwidth
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
-- indent with spaces
vim.opt.expandtab = true
-- scroll offset
vim.opt.scrolloff = 4
-- don't warp lines
vim.opt.wrap = false
-- split to right/below
vim.opt.splitright = true
vim.opt.splitbelow = true
-- presistent undo
vim.opt.undofile = true
-- searching
vim.opt.ignorecase = true
vim.opt.smartcase = true
-- preview commands
vim.opt.inccommand = "split"
-- completion
vim.opt.completeopt = "menu,menuone,noselect"
-- folding
vim.opt.foldmethod = "expr"
vim.opt.foldexpr = 'nvim_treesitter#foldexpr()'
vim.opt.foldlevelstart = 99
-- disable mouse
vim.opt.mouse = ""
-- set cursorline in active window
vim.cmd([[
augroup CursorLine
autocmd!
autocmd VimEnter,WinEnter,BufWinEnter * setlocal cursorline
autocmd WinLeave * setlocal nocursorline
augroup END
]])
-- configure terminal
vim.cmd([[
augroup terminal_setup
autocmd!
autocmd TermOpen * startinsert
autocmd TermOpen * setlocal nonumber norelativenumber
augroup END
]])

1
neovim/project-nvim.lua Normal file
View file

@ -0,0 +1 @@
require('project_nvim').setup({})

1
neovim/tabline.lua Normal file
View file

@ -0,0 +1 @@
require('tabline').setup({ enable = true, options = { show_bufnr = true, show_filename_only = true } })

29
neovim/telescope.lua Normal file
View file

@ -0,0 +1,29 @@
local telescope = require("telescope")
local actions = require("telescope.actions")
local themes = require("telescope.themes")
telescope.setup({
defaults = {
mappings = {
i = {
["<C-j>"] = actions.move_selection_next,
["<C-k>"] = actions.move_selection_previous,
["<ESC>"] = actions.close,
["<C-c>"] = actions.close
},
n = {
["<ESC>"] = actions.close,
["<C-c>"] = actions.close
}
}
},
extensions = {
["ui-select"] = {
themes.get_dropdown({})
},
}
})
telescope.load_extension("fzf")
telescope.load_extension("ui-select")
telescope.load_extension("projects")

1
neovim/themes.lua Normal file
View file

@ -0,0 +1 @@
vim.cmd("colorscheme solarized")

1
neovim/toggleterm.lua Normal file
View file

@ -0,0 +1 @@
require("toggleterm").setup({ size = 32, open_mapping = [[<F4>]] })

14
neovim/treesitter.lua Normal file
View file

@ -0,0 +1,14 @@
require('nvim-treesitter.configs').setup({
highlight = {
enable = true,
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "v",
node_decremental = "<",
node_incremental = ">",
scope_incremental = false,
},
},
})

8
nextcloud.nix Normal file
View file

@ -0,0 +1,8 @@
{ ... }:
{
services.nextcloud-client = {
enable = true;
startInBackground = true;
};
}

11
starship.nix Normal file
View file

@ -0,0 +1,11 @@
{ lib, ... }:
{
programs.starship = {
enable = true;
settings = {
format = lib.concatStrings [ "$all" "$directory" "$character" ];
hostname.format = "[$ssh_symbol$hostname]($style) ";
};
};
}

146
sway/default.nix Normal file
View file

@ -0,0 +1,146 @@
{ config, lib, pkgs, ... }:
let
font.name = "DejaVu Sans Mono";
font.size = 12.0;
lock_command = "${pkgs.swaylock-effects}/bin/swaylock --daemonize --screenshots --effect-blur 8x2 --ignore-empty-password --show-failed-attempts";
swaymsg = "${pkgs.sway}/bin/swaymsg";
in
{
imports = [
./i3status-rust.nix
./dunst.nix
];
home.packages = with pkgs; [
xdg-utils
shotman
wl-clipboard
];
programs.fuzzel = {
enable = true;
settings = {
main = {
terminal = "${pkgs.kitty}/bin/kitty";
layer = "overlay";
font = "DejaVu Sans Mono:size=12";
};
colors = {
background = "002b36ff";
border = "ffffffaa";
};
};
};
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
};
home.pointerCursor = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
size = 24;
x11 = {
enable = true;
defaultCursor = "Adwaita";
};
};
services.swayidle = {
enable = true;
events = [
{ event = "before-sleep"; command = lock_command; }
];
timeouts = [
{ timeout = 900; command = "${swaymsg} output '*' power off"; resumeCommand = "${swaymsg} output '*' power on"; }
{ timeout = 1000; command = lock_command; }
];
};
services.swayosd.enable = true;
services.poweralertd.enable = true;
wayland.windowManager.sway = {
enable = true;
config = {
window = {
border = 0;
titlebar = false;
};
modifier = "Mod4";
terminal = "${pkgs.kitty}/bin/kitty";
input = {
"type:keyboard" = {
xkb_layout = "de";
xkb_variant = "nodeadkeys";
xkb_options = "caps:escape";
};
"type:touchpad" = {
natural_scroll = "enabled";
tap = "enabled";
accel_profile = "flat";
dwt = "enabled";
};
};
seat = {
"*" = {
hide_cursor = "5000";
};
};
defaultWorkspace = "1";
focus.newWindow = "urgent";
fonts = {
names = [ font.name ];
size = font.size;
};
bars = [{
mode = "hide";
position = "top";
statusCommand = "${pkgs.i3status-rust}/bin/i3status-rs ~/.config/i3status-rust/config-default.toml";
fonts = {
names = [ font.name ];
size = font.size;
};
}];
menu = "${pkgs.fuzzel}/bin/fuzzel";
keybindings =
let
modifier = config.wayland.windowManager.sway.config.modifier;
in
lib.mkOptionDefault {
"${modifier}+Shift+s" = "exec shotman --capture region --copy";
"${modifier}+l" = "exec ${lock_command}";
"${modifier}+Shift+m" = "output '*' power off, output '*' power on, exec ${pkgs.kanshi}/bin/kanshictl reload";
"--release Caps_Lock" = "exec swayosd --caps-lock";
"XF86AudioRaiseVolume" = "exec swayosd --output-volume raise";
"XF86AudioLowerVolume" = "exec swayosd --output-volume lower";
"XF86AudioMute" = "exec swayosd --output-volume mute-toggle";
"XF86AudioMicMute" = "exec swayosd --input-volume mute-toggle";
};
startup = [
{ command = "keepassxc"; }
{ command = "kitty"; }
{ command = "element-desktop"; }
{ command = "thunderbird"; }
{ command = "firefox"; }
];
};
};
}

34
sway/dunst.nix Normal file
View file

@ -0,0 +1,34 @@
{ ... }:
{
services.dunst = {
enable = true;
settings = {
global = {
follow = "keyboard";
font = "DejaVu Sans Mono 11";
frame_width = 1;
};
urgency_low = {
frame_color = "#268bd2";
foreground = "#eee8d5";
background = "#002b36";
timeout = 4;
};
urgency_normal = {
frame_color = "#859900";
foreground = "#eee8d5";
background = "#002b36";
timeout = 6;
};
urgency_critical = {
frame_color = "#dc322f";
foreground = "#eee8d5";
background = "#002b36";
timeout = 8;
};
};
};
}

34
sway/i3status-rust.nix Normal file
View file

@ -0,0 +1,34 @@
{ pkgs, ... }:
{
programs.i3status-rust = {
enable = true;
bars = {
default = {
theme = "solarized-dark";
icons = "awesome6";
blocks = [
{
block = "net";
format = " $icon { ($ssid) |}";
click = [{
button = "left";
cmd = "${pkgs.iwgtk}/bin/iwgtk";
}];
}
{
block = "battery";
missing_format = "";
format = " $icon {($time h) |}$percentage ";
}
{
block = "time";
interval = 60;
format = " $icon $timestamp.datetime(f:'%a %d.%m %R') ";
}
];
};
};
};
}

62
xps.nix Normal file
View file

@ -0,0 +1,62 @@
{ ... }:
{
services.kanshi = {
enable = true;
settings = [
{
profile = {
name = "undocked";
outputs = [
{
criteria = "eDP-1";
scale = 1.3;
status = "enable";
}
];
};
}
{
profile = {
name = "home_office";
outputs = [
{
criteria = "Acer Technologies Acer PE270K 0x0027A130";
mode = "3840x2160";
scale = 1.75;
status = "enable";
position = "0,0";
transform = "normal";
}
{
criteria = "Acer Technologies Acer PE270K 0x0027A150";
mode = "3840x2160";
scale = 1.75;
status = "enable";
position = "2194,0";
transform = "normal";
}
{
criteria = "eDP-1";
status = "disable";
}
];
exec = ''
exec swaymsg workspace 0, move workspace to output '"Acer Technologies Acer PE270K 0x0027A130"'
exec swaymsg workspace 8, move workspace to output '"Acer Technologies Acer PE270K 0x0027A130"'
exec swaymsg workspace 6, move workspace to output '"Acer Technologies Acer PE270K 0x0027A130"'
exec swaymsg workspace 4, move workspace to output '"Acer Technologies Acer PE270K 0x0027A130"'
exec swaymsg workspace 2, move workspace to output '"Acer Technologies Acer PE270K 0x0027A130"'
exec swaymsg workspace 9, move workspace to output '"Acer Technologies Acer PE270K 0x0027A150"'
exec swaymsg workspace 7, move workspace to output '"Acer Technologies Acer PE270K 0x0027A150"'
exec swaymsg workspace 5, move workspace to output '"Acer Technologies Acer PE270K 0x0027A150"'
exec swaymsg workspace 3, move workspace to output '"Acer Technologies Acer PE270K 0x0027A150"'
exec swaymsg workspace 1, move workspace to output '"Acer Technologies Acer PE270K 0x0027A150"'
'';
};
}
];
};
}

9
zoxide.nix Normal file
View file

@ -0,0 +1,9 @@
{ ... }:
{
programs.zoxide = {
enable = true;
enableZshIntegration = true;
};
}

31
zsh.nix Normal file
View file

@ -0,0 +1,31 @@
{ theme, ... }:
let
zsh_autosuggest_highlight_style = if theme == "light" then "fg=180" else "fg=10";
in
{
programs.zsh = {
enable = true;
enableCompletion = true;
history.size = 10000;
autosuggestion = {
enable = true;
highlight = zsh_autosuggest_highlight_style;
};
initExtra = ''
function set_win_title(){
local TITLE=$(git config --get remote.origin.url || echo "$PWD")
echo -ne "\033]0; $(basename "$TITLE") \007"
}
precmd_functions+=(set_win_title)
'';
shellAliases = {
ls = "eza --group-directories-first --git";
neovide = "neovide --multigrid";
xclip = "xclip -selection clipboard";
};
};
}