modularized the config

This commit is contained in:
Rouven Seifert 2022-12-19 19:30:32 +01:00
parent fa032ceaca
commit 7e3ab85170
Signed by: rouven.seifert
GPG key ID: B95E8FE6B11C4D09
10 changed files with 375 additions and 355 deletions

View file

@ -5,6 +5,8 @@
[
# Include the results of the hardware scan.
./hardware-configuration.nix
../../shared/vim.nix
../../shared/input.nix
];
nix.settings.experimental-features = [ "nix-command" "flakes" ];
@ -16,7 +18,7 @@
networking.hostName = "thinkpad"; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
networking.firewall = {
allowedUDPPorts = [ 51820 ];
allowedUDPPorts = [ 51820 ]; # used for wireguard
checkReversePath = false;
};
@ -48,91 +50,16 @@
libinput.enable = true;
};
# Configure keymap in X11
services.xserver.layout = "us";
services.xserver.xkbVariant = "dvorak-alt-intl";
services.xserver.displayManager.sessionCommands =
"${pkgs.xorg.xmodmap}/bin/xmodmap ${pkgs.writeText "xkb-layout" ''
keycode 108 = Mode_switch
keycode 94 = Shift_L NoSymbol Shift_L
keysym a = a A adiaeresis Adiaeresis
keysym o = o O odiaeresis Odiaeresis
keysym u = u U udiaeresis Udiaeresis
keysym s = s S ssharp
''}";
# Enable sound.
sound.enable = true;
hardware.pulseaudio.enable = true;
hardware.bluetooth.enable = true;
environment.variables = { EDITOR = "vim"; };
# enable polkit
security.polkit.enable = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
# Baseline of installed packages
environment.systemPackages = with pkgs; [
((vim_configurable.override { }).customize {
name = "vim";
vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
start = [ vim-nix vim-lastplace ];
opt = [ ];
};
vimrcConfig.customRC = ''
" basic commands bound to uppercase key
command Q q
command W w
command Wq wq
command WQ wq
set number relativenumber
set tabstop=4
set shiftwidth=4
set smartcase
set colorcolumn=120
set nowrap
syntax on
highlight ColorColumn ctermbg=darkgray
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;
" set space as leader
nnoremap <SPACE> <Nop>
let mapleader = " "
" beautify indents
:set list lcs=tab:\|\
"remove ex-mode shortcut
nmap Q <Nop>
" quickfixlist binds
nnoremap <C-j> :cnext<CR>
nnoremap <C-k> :cprev<CR>
" locallist binds
nnoremap <C-l> :lnext<CR>
nnoremap <C-h> :lprev<CR>
" split keybinds
nnoremap <leader>s :sp<CR>
nnoremap <leader>v :vs<CR>
nnoremap <leader>h <C-w>h
nnoremap <leader>j <C-w>j
nnoremap <leader>k <C-w>k
nnoremap <leader>l <C-w>l
'';
}
)
# essentials
wget
git
@ -148,6 +75,8 @@
maven
];
programs.light.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
@ -155,11 +84,14 @@
# List services that you want to enable:
services.blueman.enable = true;
services.devmon.enable = true;
services.pcscd.enable = true; # yubikey and smartcard stuff
services.printing.enable = true;
services.fprintd.enable = true;
services = {
blueman.enable = true;
devmon.enable = true;
pcscd.enable = true; # yubikey and smartcard stuff
printing.enable = true;
fprintd.enable = true; # log in using fingerprint
picom.enable = true;
};
# Automatically configure displays
services.autorandr.enable = true;

15
shared/input.nix Normal file
View file

@ -0,0 +1,15 @@
{ config, pkgs, ... }:
{
# Configure keymap in X11
services.xserver.layout = "us";
services.xserver.xkbVariant = "dvorak-alt-intl";
services.xserver.displayManager.sessionCommands =
"${pkgs.xorg.xmodmap}/bin/xmodmap ${pkgs.writeText "xkb-layout" ''
keycode 108 = Mode_switch
keycode 94 = Shift_L NoSymbol Shift_L
keysym a = a A adiaeresis Adiaeresis
keysym o = o O odiaeresis Odiaeresis
keysym u = u U udiaeresis Udiaeresis
keysym s = s S ssharp
''}";
}

64
shared/vim.nix Normal file
View file

@ -0,0 +1,64 @@
{ config, pkgs, ... }:
{
environment.variables = { EDITOR = "vim"; };
environment.systemPackages = with pkgs; [
((vim_configurable.override { }).customize {
name = "vim";
vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
start = [ vim-nix vim-lastplace ];
opt = [ ];
};
vimrcConfig.customRC = ''
" basic commands bound to uppercase key
command Q q
command W w
command Wq wq
command WQ wq
set number relativenumber
set tabstop=4
set shiftwidth=4
set smartcase
set colorcolumn=120
set nowrap
syntax on
highlight ColorColumn ctermbg=darkgray
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;
" set space as leader
nnoremap <SPACE> <Nop>
let mapleader = " "
" beautify indents
:set list lcs=tab:\|\
"remove ex-mode shortcut
nmap Q <Nop>
" quickfixlist binds
nnoremap <C-j> :cnext<CR>
nnoremap <C-k> :cprev<CR>
" locallist binds
nnoremap <C-l> :lnext<CR>
nnoremap <C-h> :lprev<CR>
" split keybinds
nnoremap <leader>s :sp<CR>
nnoremap <leader>v :vs<CR>
nnoremap <leader>h <C-w>h
nnoremap <leader>j <C-w>j
nnoremap <leader>k <C-w>k
nnoremap <leader>l <C-w>l
'';
}
)
];
}

View file

@ -1,7 +1,6 @@
{ config, pkgs, ... }:
{
nixpkgs.config.allowUnfree = true;
# Define a user account.
users.users.rouven = {
isNormalUser = true;
extraGroups = [ "wheel" "video" "libvirtd" ];
@ -13,6 +12,8 @@
imports = [ ./modules ];
config = {
home.username = "rouven";
home.homeDirectory = "/home/rouven";
home.stateVersion = config.system.stateVersion;
};
};

View file

@ -5,279 +5,13 @@
[
./vifm
./alacritty
];
home.username = "rouven";
home.homeDirectory = "/home/rouven";
home.packages = with pkgs; [
# essentials
alacritty
networkmanagerapplet
pcmanfm
# vifm
xsel
lightlocker
vlc
# graphics
lxappearance
feh
flameshot
picom
okular
gimp
# editing
fzf
powerline-fonts
# sound
pavucontrol
# bluetooth
blueman
# internet
thunderbird
discord
google-chrome
nextcloud-client
zoom-us
# messaging
tdesktop
element-desktop
whatsapp-for-linux
# games
minecraft
superTuxKart
extremetuxracer
wine
# yubikey and password stuff
yubikey-manager
yubikey-manager-qt
yubioath-desktop
pass
# misc
fzf
neofetch
trash-cli
spotify
plover.dev
nixpkgs-fmt
virt-manager
# libs
libyubikey
libfido2
./zsh
./tmux
./git
./neovim
./packages.nix
];
# programs.light.enable = true; # display brightness manager
# programs.kdeconnect.enable = true;
programs.git = {
enable = true;
userName = "Rouven Seifert";
userEmail = "rouven@rfive.de";
extraConfig = {
user.signingkey = "B95E8FE6B11C4D09";
pull.rebase = false;
init.defaultBranch = "main";
commit.gpgsign = true;
};
};
programs.zsh = {
enable = true;
shellAliases = {
rm = "trash";
vifm = "vifm .";
};
history = {
size = 10000;
path = "${config.xdg.dataHome}/zsh/history";
};
oh-my-zsh = {
enable = true;
# plugins = [ "zsh-autosuggestions" "fzf-tab" ];
theme = "agnoster";
};
plugins = [
{
name = "zsh-autosuggestions";
src = pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-autosuggestions";
rev = "v0.7.0";
sha256 = "KLUYpUu4DHRumQZ3w59m9aTW6TBKMCXl2UcKi4uMd7w=";
};
}
{
name = "fzf-tab";
src = pkgs.fetchFromGitHub {
owner = "Aloxaf";
repo = "fzf-tab";
rev = "14f66e4d3d0b366552c0412eb08ca9e0f7c797bd";
sha256 = "YkfHPSuSKParz7JidR924CJSuXO6Rk0RZTlxPOBwLJk=";
};
}
];
localVariables = {
COMPLETION_WAITING_DOTS = "true";
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE = "fg=#00bbbb,bold";
# ZSH_AUTOSUGGEST_STRATEGY="(history completion)";
};
initExtra =
''
function c() {
cd
if [ $# -eq 0 ]; then
cd $(find -maxdepth 4 -not -path '*[cC]ache*' -not -path '*[tT]rash*' -type d | fzf --preview 'tree -C {}')
else
$1 $(find -maxdepth 5 -not -path '*[cC]ache*' -not -path '*[tT]rash*' | fzf --preview 'tree -C {}')
fi
}
function sn() {
nmcli connection up $(nmcli connection show | tail -n +2 | cut -d " " -f1 | fzf --preview 'nmcli connection show {}')
}
prompt_dir() {
prompt_segment blue $CURRENT_FG '%c'
}
'';
};
programs.tmux = {
enable = true;
keyMode = "vi";
terminal = "tmux-256color";
clock24 = true;
extraConfig =
''
set -g default-shell /etc/profiles/per-user/rouven/bin/zsh
bind P display-popup
'';
plugins = with pkgs.tmuxPlugins; [
{
plugin = dracula;
extraConfig = ''
set -g @dracula-show-fahrenheit false
set -g @dracula-plugins "weather time"
set -g @dracula-show-left-icon session
set -g @dracula-show-powerline true
'';
}
];
};
programs.neovim = {
enable = true;
# defaultEditor = true; why the hell doesn't this work :(
# vimAlias = true;
plugins = with pkgs.vimPlugins; [
nerdtree
nerdcommenter
fugitive-gitlab-vim
vim-repeat
vim-airline
fzf-vim
dracula-vim
vim-nix # this destroys my tab settings, ffs
];
extraConfig =
''
" basic commands bound to uppercase key
command Q q
command W w
command Wq wq
command WQ wq
set shiftwidth=4
set noexpandtab
set preserveindent
set number relativenumber
set tabstop=4
set smartcase
set colorcolumn=120
set nowrap
highlight ColorColumn ctermbg=darkgray
" beautify indents
:set list lcs=tab:\|\
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;
" set space as leader
nnoremap <SPACE> <Nop>
let mapleader = " "
" air-line
let g:airline_powerline_fonts = 1
" NERDTree
nnoremap <leader>n :NERDTreeFocus<CR> :NERDTreeRefreshRoot<CR>
" NERDTree autostart"
autocmd VimEnter * NERDTree | wincmd p
" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
"remove ex-mode shortcut
nmap Q <Nop>
" trigger the fuzzy finder (fzf)
nnoremap <leader>f :Files<CR>
nnoremap <leader>g :GFiles<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>r :Rg<CR>
" keybinds for coc
nnoremap <leader>d :CocDiagnostics<CR>
" quickfixlist binds
nnoremap <C-j> :cnext<CR>
nnoremap <C-k> :cprev<CR>
" locallist binds
nnoremap <C-l> :lnext<CR>
nnoremap <C-h> :lprev<CR>
" split keybinds
nnoremap <leader>s :sp<CR>
nnoremap <leader>v :vs<CR>
nnoremap <leader>h <C-w>h
nnoremap <leader>j <C-w>j
nnoremap <leader>k <C-w>k
nnoremap <leader>l <C-w>l
" coloring stuff
let g:dracula_colorterm = 0
colorscheme dracula
" better autocompletion menu colors
highlight Pmenu ctermbg=darkgray ctermfg=black
highlight PmenuSel ctermbg=gray ctermfg=black
'';
};
services.picom = {
enable = true;
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# programs.kdeconnect.enable = true; # doesn't work yet
}

View file

@ -0,0 +1,15 @@
{ config, pkgs, ... }:
{
programs.git = {
enable = true;
userName = "Rouven Seifert";
userEmail = "rouven@rfive.de";
extraConfig = {
user.signingkey = "B95E8FE6B11C4D09";
pull.rebase = false;
init.defaultBranch = "main";
commit.gpgsign = true;
};
};
}

View file

@ -0,0 +1,99 @@
{ config, pkgs, ... }:
{
programs.neovim = {
enable = true;
# defaultEditor = true; why the hell doesn't this work :(
# vimAlias = true;
plugins = with pkgs.vimPlugins; [
nerdtree
nerdcommenter
fugitive-gitlab-vim
vim-repeat
vim-airline
fzf-vim
dracula-vim
vim-nix # this destroys my tab settings, ffs
];
extraConfig =
''
" basic commands bound to uppercase key
command Q q
command W w
command Wq wq
command WQ wq
set shiftwidth=4
set noexpandtab
set preserveindent
set number relativenumber
set tabstop=4
set smartcase
set colorcolumn=120
set nowrap
highlight ColorColumn ctermbg=darkgray
" beautify indents
:set list lcs=tab:\|\
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;
" set space as leader
nnoremap <SPACE> <Nop>
let mapleader = " "
" air-line
let g:airline_powerline_fonts = 1
" NERDTree
nnoremap <leader>n :NERDTreeFocus<CR> :NERDTreeRefreshRoot<CR>
" NERDTree autostart"
autocmd VimEnter * NERDTree | wincmd p
" Close the tab if NERDTree is the only window remaining in it.
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
"remove ex-mode shortcut
nmap Q <Nop>
" trigger the fuzzy finder (fzf)
nnoremap <leader>f :Files<CR>
nnoremap <leader>g :GFiles<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>r :Rg<CR>
" keybinds for coc
nnoremap <leader>d :CocDiagnostics<CR>
" quickfixlist binds
nnoremap <C-j> :cnext<CR>
nnoremap <C-k> :cprev<CR>
" locallist binds
nnoremap <C-l> :lnext<CR>
nnoremap <C-h> :lprev<CR>
" split keybinds
nnoremap <leader>s :sp<CR>
nnoremap <leader>v :vs<CR>
nnoremap <leader>h <C-w>h
nnoremap <leader>j <C-w>j
nnoremap <leader>k <C-w>k
nnoremap <leader>l <C-w>l
" coloring stuff
let g:dracula_colorterm = 0
colorscheme dracula
" better autocompletion menu colors
highlight Pmenu ctermbg=darkgray ctermfg=black
highlight PmenuSel ctermbg=gray ctermfg=black
'';
};
}

View file

@ -0,0 +1,67 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
# essentials
alacritty
networkmanagerapplet
pcmanfm
xsel
lightlocker
vlc
# graphics
lxappearance
feh
flameshot
picom
okular
gimp
# editing
fzf
powerline-fonts
# sound
pavucontrol
# bluetooth
blueman
# internet
thunderbird
discord
google-chrome
nextcloud-client
zoom-us
# messaging
tdesktop
element-desktop
whatsapp-for-linux
# games
minecraft
superTuxKart
extremetuxracer
wine
# yubikey and password stuff
yubikey-manager
yubikey-manager-qt
yubioath-desktop
pass
# misc
fzf
neofetch
trash-cli
spotify
nixpkgs-fmt
virt-manager
# libs
libyubikey
libfido2
];
}

View file

@ -0,0 +1,26 @@
{ config, pkgs, ... }:
{
programs.tmux = {
enable = true;
keyMode = "vi";
terminal = "tmux-256color";
clock24 = true;
extraConfig =
''
set -g default-shell /etc/profiles/per-user/rouven/bin/zsh
bind P display-popup
'';
plugins = with pkgs.tmuxPlugins; [
{
plugin = dracula;
extraConfig = ''
set -g @dracula-show-fahrenheit false
set -g @dracula-plugins "weather time"
set -g @dracula-show-left-icon session
set -g @dracula-show-powerline true
'';
}
];
};
}

View file

@ -0,0 +1,67 @@
{ config, pkgs, ... }:
{
programs.zsh = {
enable = true;
shellAliases = {
rm = "trash";
vifm = "vifm .";
};
history = {
size = 10000;
path = "${config.xdg.dataHome}/zsh/history";
};
oh-my-zsh = {
enable = true;
# plugins = [ "zsh-autosuggestions" "fzf-tab" ];
theme = "agnoster";
};
plugins = [
{
name = "zsh-autosuggestions";
src = pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-autosuggestions";
rev = "v0.7.0";
sha256 = "KLUYpUu4DHRumQZ3w59m9aTW6TBKMCXl2UcKi4uMd7w=";
};
}
{
name = "fzf-tab";
src = pkgs.fetchFromGitHub {
owner = "Aloxaf";
repo = "fzf-tab";
rev = "14f66e4d3d0b366552c0412eb08ca9e0f7c797bd";
sha256 = "YkfHPSuSKParz7JidR924CJSuXO6Rk0RZTlxPOBwLJk=";
};
}
];
localVariables = {
COMPLETION_WAITING_DOTS = "true";
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE = "fg=#00bbbb,bold";
# ZSH_AUTOSUGGEST_STRATEGY="(history completion)";
};
initExtra =
''
function c() {
cd
if [ $# -eq 0 ]; then
cd $(find -maxdepth 4 -not -path '*[cC]ache*' -not -path '*[tT]rash*' -type d | fzf --preview 'tree -C {}')
else
$1 $(find -maxdepth 5 -not -path '*[cC]ache*' -not -path '*[tT]rash*' | fzf --preview 'tree -C {}')
fi
}
function sn() {
nmcli connection up $(nmcli connection show | tail -n +2 | cut -d " " -f1 | fzf --preview 'nmcli connection show {}')
}
prompt_dir() {
prompt_segment blue $CURRENT_FG '%c'
}
'';
};
}