initial commit after purge
This commit is contained in:
commit
1c853edcab
62 changed files with 3494 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.DS_Store
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "nix-secrets"]
|
||||
path = nix-secrets
|
||||
url = gitea@git.vatthauer.xyz:leonv/nix-secrets.git
|
11
common/default.nix
Executable file
11
common/default.nix
Executable file
|
@ -0,0 +1,11 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./vscode.nix
|
||||
./git.nix
|
||||
./direnv.nix
|
||||
./starship.nix
|
||||
./neovim
|
||||
#./vim.nix
|
||||
];
|
||||
}
|
8
common/direnv.nix
Executable file
8
common/direnv.nix
Executable file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
0
common/doom.d/config.el
Normal file
0
common/doom.d/config.el
Normal file
0
common/doom.d/init.el
Normal file
0
common/doom.d/init.el
Normal file
0
common/doom.d/packages.el
Normal file
0
common/doom.d/packages.el
Normal file
109
common/eww/config/eww.scss
Normal file
109
common/eww/config/eww.scss
Normal file
|
@ -0,0 +1,109 @@
|
|||
// catppuccin colors
|
||||
$rosewater: #f4dbd6;
|
||||
$flamingo: #f0c6c6;
|
||||
$pink: #f5bde6;
|
||||
$mauve: #c6a0f6;
|
||||
$red: #ed8796;
|
||||
$maroon: #ee99a0;
|
||||
$peach: #f5a97f;
|
||||
$yellow: #eed49f;
|
||||
$green: #a6da95;
|
||||
$teal: #8bd5ca;
|
||||
$sky: #91d7e3;
|
||||
$sapphire: #7dc4e4;
|
||||
$blue: #8aadf4;
|
||||
$lavender: #b7bdf8;
|
||||
$accent: $flamingo;
|
||||
$text: #cad3f5;
|
||||
$subtext1: #b8c0e0;
|
||||
$subtext0: #a5adcb;
|
||||
$overlay2: #939ab7;
|
||||
$overlay1: #8087a2;
|
||||
$overlay0: #6e738d;
|
||||
$surface2: #5b6078;
|
||||
$surface1: #494d64;
|
||||
$surface0: #363a4f;
|
||||
$base: #24273a;
|
||||
$mantle: #1e2030;
|
||||
$crust: #181926;
|
||||
|
||||
*{
|
||||
all: unset;
|
||||
font-family: "monospace";
|
||||
}
|
||||
|
||||
// .bar {
|
||||
// background-color: $base;
|
||||
// border-radius: 16px;
|
||||
// }
|
||||
|
||||
.container {
|
||||
background-color: $base;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
tooltip.background {
|
||||
background-color: #0f0f17;
|
||||
font-size: 18px;
|
||||
border-radius: 10px;
|
||||
color: #bfc9db;
|
||||
}
|
||||
|
||||
tooltip label {
|
||||
margin: 6px;
|
||||
}
|
||||
|
||||
.time {
|
||||
font-size: 18px;
|
||||
margin: 0px 20px 0px 10px;
|
||||
color: $teal;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.volume_text {
|
||||
font-size: 18px;
|
||||
color: $maroon;
|
||||
margin: 0px 10px 0px 10px;
|
||||
}
|
||||
|
||||
.network_icon {
|
||||
font-size: 18px;
|
||||
color: $green;
|
||||
margin: 0px 10px 0px 10px;
|
||||
}
|
||||
.bluetooth_icon {
|
||||
font-size: 18px;
|
||||
color: $blue;
|
||||
margin: 0px 10px 0px 10px;
|
||||
}
|
||||
.cpu_text {
|
||||
font-size: 18px;
|
||||
color: $maroon;
|
||||
margin: 0px 10px 0px 10px;
|
||||
}
|
||||
.mem_text {
|
||||
font-size: 18px;
|
||||
color: $yellow;
|
||||
margin: 0px 10px 0px 10px;
|
||||
}
|
||||
|
||||
.workspaces-widget {
|
||||
color: $sky;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.workspaces-widget .empty {
|
||||
color: rgba($sky, 0.3);
|
||||
}
|
||||
|
||||
.title {
|
||||
color: $mauve;
|
||||
font-size: 16px;
|
||||
padding: 0px 5px 0px 5px;
|
||||
}
|
||||
|
||||
.nixos-icon {
|
||||
font-size: 22px;
|
||||
color: #7CB5DE;
|
||||
margin: 0px 10px 0px 10px;
|
||||
}
|
51
common/eww/config/eww.yuck
Normal file
51
common/eww/config/eww.yuck
Normal file
|
@ -0,0 +1,51 @@
|
|||
; inspired by https://github.com/saimoomedits/eww-widgets/tree/main
|
||||
|
||||
(include "./widgets/workspaces/eww.yuck")
|
||||
(include "./widgets/window-title/eww.yuck")
|
||||
(include "./widgets/resources/eww.yuck")
|
||||
|
||||
(defwindow top-bar
|
||||
:monitor 0
|
||||
:geometry (geometry :x "0%"
|
||||
:y "10px"
|
||||
:width "98.8%"
|
||||
:height "30px"
|
||||
:anchor "top center")
|
||||
:stacking "fg"
|
||||
:exclusive true
|
||||
(centerbox
|
||||
:class "bar"
|
||||
(left)
|
||||
(center)
|
||||
(right)))
|
||||
|
||||
(defwidget left []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "start"
|
||||
:class "container"
|
||||
(label :text "" :class "nixos-icon")
|
||||
(workspaces)
|
||||
))
|
||||
|
||||
(defwidget center []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "center"
|
||||
:class "container"
|
||||
:visible {strlength(window) != 0}
|
||||
(windowtitle)
|
||||
))
|
||||
|
||||
(defwidget right []
|
||||
(box
|
||||
:space-evenly false
|
||||
:halign "end"
|
||||
:class "container"
|
||||
(volume)
|
||||
(cpu)
|
||||
(mem)
|
||||
(network)
|
||||
(bluetooth)
|
||||
(datetime)
|
||||
))
|
92
common/eww/config/widgets/resources/eww.yuck
Normal file
92
common/eww/config/widgets/resources/eww.yuck
Normal file
|
@ -0,0 +1,92 @@
|
|||
; for unicode symbols: https://jrgraphix.net/r/Unicode/E000-F8FF
|
||||
|
||||
; VARIABLES
|
||||
|
||||
(defvar GB 1024000000)
|
||||
(defvar MB 1024000)
|
||||
|
||||
; DATE + TIME
|
||||
|
||||
(defpoll time :interval "5s"
|
||||
:initial ""
|
||||
`date +%H:%M`)
|
||||
(defpoll date :interval "60s"
|
||||
:initial ""
|
||||
`date "+%A | %m-%d-%+4Y"`)
|
||||
|
||||
(defwidget datetime []
|
||||
(eventbox
|
||||
:tooltip date
|
||||
(label
|
||||
:class "text time"
|
||||
:text time)
|
||||
))
|
||||
|
||||
; CPU
|
||||
|
||||
(defwidget cpu []
|
||||
(box
|
||||
:active true
|
||||
:tooltip "${round(EWW_CPU.cores[0].freq/1000,2)} GHz"
|
||||
(label
|
||||
:class "cpu_text"
|
||||
:text " ${round(EWW_CPU.avg,0)}%")
|
||||
)
|
||||
)
|
||||
|
||||
; MEMORY
|
||||
(defwidget mem []
|
||||
(box
|
||||
:active true
|
||||
:tooltip {EWW_RAM.used_mem / GB < 1 ? "${round(EWW_RAM.used_mem / MB, 1)} M used" : "${round(EWW_RAM.used_mem / GB, 1)} G used"}
|
||||
(label
|
||||
:class "mem_text"
|
||||
:text " ${round(EWW_RAM.used_mem_perc,0)}%")
|
||||
)
|
||||
)
|
||||
|
||||
; TEMP
|
||||
; TODO temperature widget (hover to show all times sorted nicely)
|
||||
;
|
||||
|
||||
; NETWORK
|
||||
|
||||
(defpoll hostname :interval "1m" :initial "" "hostname")
|
||||
(defpoll status-icon :interval "5s" :initial "" "./widgets/resources/network.sh")
|
||||
|
||||
(defwidget network []
|
||||
(eventbox
|
||||
:active true
|
||||
:onclick "/usr/bin/env nm-connection-editor &"
|
||||
:tooltip hostname
|
||||
(label
|
||||
:text status-icon
|
||||
:class "network_icon")))
|
||||
|
||||
; BLUETOOTH
|
||||
(defwidget bluetooth []
|
||||
(eventbox
|
||||
:active true
|
||||
:onclick "blueman-manager &"
|
||||
(label
|
||||
:text ""
|
||||
:class "bluetooth_icon")))
|
||||
|
||||
; VOLUME
|
||||
|
||||
(defpoll volume_percent :interval "0.1s" :initial "40" "amixer sget Master | grep 'Left:' | awk -F'[][]' '{ print $2 }' | tr -d '%'")
|
||||
|
||||
(defwidget volume []
|
||||
(eventbox
|
||||
:active true
|
||||
:onclick "/usr/bin/env pavucontrol &"
|
||||
:onscroll "if [ {} = 'up' ]; then wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+; else wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-; fi" ; wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-
|
||||
(box
|
||||
:space-evenly false
|
||||
:orientation "h"
|
||||
:spacing "3"
|
||||
(label
|
||||
:class "volume_text"
|
||||
:text "${volume_percent <= 33 ? "" : volume_percent <= 66 ? "" : ""} ${volume_percent}%")
|
||||
)))
|
||||
; TODO add mic widget
|
9
common/eww/config/widgets/resources/network.sh
Executable file
9
common/eww/config/widgets/resources/network.sh
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
status=$(nmcli g | grep -oE "disconnected")
|
||||
|
||||
if [ $status ] ; then
|
||||
echo "✘"
|
||||
else
|
||||
echo ""
|
||||
fi
|
7
common/eww/config/widgets/window-title/eww.yuck
Normal file
7
common/eww/config/widgets/window-title/eww.yuck
Normal file
|
@ -0,0 +1,7 @@
|
|||
(deflisten window :initial "" "sh ./widgets/window-title/get-window-title.sh")
|
||||
(defwidget windowtitle []
|
||||
(box :class "title"
|
||||
(label :text {window == "null" ? "" : window} :class "title"
|
||||
)
|
||||
)
|
||||
)
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
hyprctl activewindow -j | jq --raw-output .title
|
||||
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 awk -F '>>|,' '/^activewindow>>/{print $3}'
|
|
@ -0,0 +1,21 @@
|
|||
#!/usr/bin/env bash
|
||||
function clamp {
|
||||
min=$1
|
||||
max=$2
|
||||
val=$3
|
||||
python -c "print(max($min, min($val, $max)))"
|
||||
}
|
||||
|
||||
direction=$1
|
||||
current=$2
|
||||
if test "$direction" = "down"
|
||||
then
|
||||
target=$(clamp 1 10 $(($current+1)))
|
||||
echo "jumping to $target"
|
||||
hyprctl dispatch workspace $target
|
||||
elif test "$direction" = "up"
|
||||
then
|
||||
target=$(clamp 1 10 $(($current-1)))
|
||||
echo "jumping to $target"
|
||||
hyprctl dispatch workspace $target
|
||||
fi
|
18
common/eww/config/widgets/workspaces/eww.yuck
Normal file
18
common/eww/config/widgets/workspaces/eww.yuck
Normal file
|
@ -0,0 +1,18 @@
|
|||
(deflisten workspaces :initial "[]" "bash ./widgets/workspaces/get-workspaces.sh")
|
||||
(deflisten current_workspace :initial "1" "bash ./widgets/workspaces/get-active-workspace.sh")
|
||||
|
||||
(defwidget workspaces []
|
||||
(eventbox :onscroll "bash ./widgets/workspaces/change-active-workspace.sh {} ${current_workspace}" :class "workspaces-widget"
|
||||
(box :space-evenly true
|
||||
(label :text "${workspaces}${current_workspace}" :visible false)
|
||||
(for workspace in workspaces
|
||||
(eventbox :onclick "hyprctl dispatch workspace ${workspace.id}"
|
||||
(box :width "30" :height "30" :class "workspace-entry ${workspace.id == current_workspace ? "current" : ""} ${workspace.windows > 0 ? "occupied" : "empty"}"
|
||||
(label :text {workspace.id == current_workspace ? "" : workspace.windows > 0 ? "" : ""}
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
6
common/eww/config/widgets/workspaces/get-active-workspace.sh
Executable file
6
common/eww/config/widgets/workspaces/get-active-workspace.sh
Executable file
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id'
|
||||
|
||||
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - |
|
||||
stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}'
|
11
common/eww/config/widgets/workspaces/get-workspaces.sh
Executable file
11
common/eww/config/widgets/workspaces/get-workspaces.sh
Executable file
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
spaces (){
|
||||
WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries')
|
||||
seq 1 10 | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})'
|
||||
}
|
||||
|
||||
spaces
|
||||
socat -u UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do
|
||||
spaces
|
||||
done
|
8
common/eww/default.nix
Normal file
8
common/eww/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.eww = {
|
||||
enable = true;
|
||||
package = pkgs.eww-wayland;
|
||||
configDir = ./config;
|
||||
};
|
||||
}
|
24
common/git.nix
Executable file
24
common/git.nix
Executable file
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
lfs.enable = true;
|
||||
extraConfig = {
|
||||
init = {
|
||||
defaultBranch = "main";
|
||||
};
|
||||
};
|
||||
includes = [
|
||||
{
|
||||
contents = {
|
||||
gpg.format = "ssh";
|
||||
user = {
|
||||
name = "Leon Vatthauer";
|
||||
email = "leon.vatthauer@fau.de";
|
||||
signingkey = "~/.ssh/git";
|
||||
};
|
||||
commit.gpgsign = true;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
185
common/neovim/coc.nix
Normal file
185
common/neovim/coc.nix
Normal file
|
@ -0,0 +1,185 @@
|
|||
{ pkgs, ...}:
|
||||
{
|
||||
programs.neovim = {
|
||||
coc = {
|
||||
enable = true;
|
||||
settings = {
|
||||
languageserver = {
|
||||
haskell = {
|
||||
command = "haskell-language-server-wrapper";
|
||||
args = [ "--lsp" ];
|
||||
rootPatterns = [
|
||||
"*.cabal"
|
||||
"cabal.project"
|
||||
"hie.yaml"
|
||||
];
|
||||
filetypes = [ "haskell" "lhaskell" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
{
|
||||
plugin = coc-nvim;
|
||||
config = ''
|
||||
" Having longer updatetime (default is 4000 ms = 4s) leads to noticeable
|
||||
" delays and poor user experience
|
||||
set updatetime=300
|
||||
|
||||
" Always show the signcolumn, otherwise it would shift the text each time
|
||||
" diagnostics appear/become resolved
|
||||
set signcolumn=yes
|
||||
|
||||
" Use tab for trigger completion with characters ahead and navigate
|
||||
" NOTE: There's always complete item selected by default, you may want to enable
|
||||
" no select by `"suggest.noselect": true` in your configuration file
|
||||
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
|
||||
" other plugin before putting this into your config
|
||||
inoremap <silent><expr> <TAB>
|
||||
\ coc#pum#visible() ? coc#pum#next(1) :
|
||||
\ CheckBackspace() ? "\<Tab>" :
|
||||
\ coc#refresh()
|
||||
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
|
||||
|
||||
" Make <CR> to accept selected completion item or notify coc.nvim to format
|
||||
" <C-g>u breaks current undo, please make your own choice
|
||||
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
|
||||
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
|
||||
|
||||
function! CheckBackspace() abort
|
||||
let col = col('.') - 1
|
||||
return !col || getline('.')[col - 1] =~# '\s'
|
||||
endfunction
|
||||
|
||||
" Use <c-space> to trigger completion
|
||||
if has('nvim')
|
||||
inoremap <silent><expr> <c-space> coc#refresh()
|
||||
else
|
||||
inoremap <silent><expr> <c-@> coc#refresh()
|
||||
endif
|
||||
|
||||
" Use `[g` and `]g` to navigate diagnostics
|
||||
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
|
||||
nmap <silent> [g <Plug>(coc-diagnostic-prev)
|
||||
nmap <silent> ]g <Plug>(coc-diagnostic-next)
|
||||
|
||||
" GoTo code navigation
|
||||
nmap <silent> gd <Plug>(coc-definition)
|
||||
nmap <silent> gy <Plug>(coc-type-definition)
|
||||
nmap <silent> gi <Plug>(coc-implementation)
|
||||
nmap <silent> gr <Plug>(coc-references)
|
||||
|
||||
" Use K to show documentation in preview window
|
||||
nnoremap <silent> K :call ShowDocumentation()<CR>
|
||||
|
||||
function! ShowDocumentation()
|
||||
if CocAction('hasProvider', 'hover')
|
||||
call CocActionAsync('doHover')
|
||||
else
|
||||
call feedkeys('K', 'in')
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Highlight the symbol and its references when holding the cursor
|
||||
autocmd CursorHold * silent call CocActionAsync('highlight')
|
||||
|
||||
" Symbol renaming
|
||||
nmap <leader>rn <Plug>(coc-rename)
|
||||
|
||||
" Formatting selected code
|
||||
xmap <leader>f <Plug>(coc-format-selected)
|
||||
nmap <leader>f <Plug>(coc-format-selected)
|
||||
|
||||
augroup mygroup
|
||||
autocmd!
|
||||
" Setup formatexpr specified filetype(s)
|
||||
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
|
||||
" Update signature help on jump placeholder
|
||||
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
|
||||
augroup end
|
||||
|
||||
" Applying code actions to the selected code block
|
||||
" Example: `<leader>aap` for current paragraph
|
||||
xmap <leader>a <Plug>(coc-codeaction-selected)
|
||||
nmap <leader>a <Plug>(coc-codeaction-selected)
|
||||
|
||||
" Remap keys for applying code actions at the cursor position
|
||||
nmap <leader>ac <Plug>(coc-codeaction-cursor)
|
||||
" Remap keys for apply code actions affect whole buffer
|
||||
nmap <leader>as <Plug>(coc-codeaction-source)
|
||||
" Apply the most preferred quickfix action to fix diagnostic on the current line
|
||||
nmap <leader>qf <Plug>(coc-fix-current)
|
||||
|
||||
" Remap keys for applying refactor code actions
|
||||
nmap <silent> <leader>re <Plug>(coc-codeaction-refactor)
|
||||
xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
|
||||
nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
|
||||
|
||||
" Run the Code Lens action on the current line
|
||||
nmap <leader>cl <Plug>(coc-codelens-action)
|
||||
|
||||
" Map function and class text objects
|
||||
" NOTE: Requires 'textDocument.documentSymbol' support from the language server
|
||||
xmap if <Plug>(coc-funcobj-i)
|
||||
omap if <Plug>(coc-funcobj-i)
|
||||
xmap af <Plug>(coc-funcobj-a)
|
||||
omap af <Plug>(coc-funcobj-a)
|
||||
xmap ic <Plug>(coc-classobj-i)
|
||||
omap ic <Plug>(coc-classobj-i)
|
||||
xmap ac <Plug>(coc-classobj-a)
|
||||
omap ac <Plug>(coc-classobj-a)
|
||||
|
||||
" Remap <C-f> and <C-b> to scroll float windows/popups
|
||||
if has('nvim-0.4.0') || has('patch-8.2.0750')
|
||||
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
|
||||
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
|
||||
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||
endif
|
||||
|
||||
" Use CTRL-S for selections ranges
|
||||
" Requires 'textDocument/selectionRange' support of language server
|
||||
nmap <silent> <C-s> <Plug>(coc-range-select)
|
||||
xmap <silent> <C-s> <Plug>(coc-range-select)
|
||||
|
||||
" Add `:Format` command to format current buffer
|
||||
command! -nargs=0 Format :call CocActionAsync('format')
|
||||
" Add `:Fold` command to fold current buffer
|
||||
command! -nargs=? Fold :call CocAction('fold', <f-args>)
|
||||
|
||||
" Add `:OR` command for organize imports of the current buffer
|
||||
command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport')
|
||||
|
||||
" Add (Neo)Vim's native statusline support
|
||||
" NOTE: Please see `:h coc-status` for integrations with external plugins that
|
||||
" provide custom statusline: lightline.vim, vim-airline
|
||||
|
||||
" Mappings for CoCList
|
||||
" Show all diagnostics
|
||||
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
|
||||
" Manage extensions
|
||||
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
|
||||
" Show commands
|
||||
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
|
||||
" Find symbol of current document
|
||||
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
|
||||
" Search workspace symbols
|
||||
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
|
||||
" Do default action for next item
|
||||
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
|
||||
" Do default action for previous item
|
||||
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
|
||||
" Resume latest coc list
|
||||
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
|
||||
'';
|
||||
}
|
||||
coc-git
|
||||
coc-snippets
|
||||
vim-snippets
|
||||
coc-vimtex
|
||||
vim-lightline-coc
|
||||
];
|
||||
};
|
||||
}
|
15
common/neovim/coq.nix
Normal file
15
common/neovim/coq.nix
Normal file
|
@ -0,0 +1,15 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
{
|
||||
plugin = Coqtail;
|
||||
config = ''
|
||||
nnoremap <A-down> <Plug>CoqNext<Plug>CoqJumpToEnd
|
||||
nnoremap <A-up> <Plug>CoqUndo<Plug>CoqJumpToEnd
|
||||
nnoremap <A-right> <Plug>CoqToLine
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
32
common/neovim/default.nix
Normal file
32
common/neovim/default.nix
Normal file
|
@ -0,0 +1,32 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./haskell.nix
|
||||
./coq.nix
|
||||
./telescope.nix
|
||||
./coc.nix
|
||||
./lightline.nix
|
||||
./nerdtree.nix
|
||||
./treesitter.nix
|
||||
];
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
extraConfig = import ./nvimrc.nix;
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
# languages
|
||||
nvim-dap
|
||||
nvim-lspconfig
|
||||
vim-nix
|
||||
vimtex
|
||||
|
||||
# look and feel
|
||||
awesome-vim-colorschemes
|
||||
fugitive
|
||||
];
|
||||
withPython3 = true;
|
||||
withNodeJs = true;
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
};
|
||||
}
|
18
common/neovim/haskell.nix
Normal file
18
common/neovim/haskell.nix
Normal file
|
@ -0,0 +1,18 @@
|
|||
# haskell integration, adapted from @srid
|
||||
# https://github.com/srid/nixos-config/blob/master/home/neovim/haskell.nix
|
||||
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
haskell-vim
|
||||
vim-hoogle
|
||||
];
|
||||
extraLuaConfig = ''
|
||||
-- Setup language servers.
|
||||
local lspconfig = require('lspconfig')
|
||||
lspconfig.hls.setup {}
|
||||
'';
|
||||
|
||||
};
|
||||
}
|
30
common/neovim/lightline.nix
Normal file
30
common/neovim/lightline.nix
Normal file
|
@ -0,0 +1,30 @@
|
|||
{ pkgs, ...}:
|
||||
{
|
||||
programs.neovim = {
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
{
|
||||
plugin = lightline-vim;
|
||||
config = ''
|
||||
function! CocCurrentFunction()
|
||||
return get(b:, 'coc_current_function', ''\'')
|
||||
endfunction
|
||||
|
||||
let g:lightline = {
|
||||
\ 'colorscheme': 'solarized',
|
||||
\ 'active': {
|
||||
\ 'left': [ [ 'mode', 'paste' ],
|
||||
\ [ 'cocstatus', 'currentfunction', 'readonly', 'filename', 'modified' ],
|
||||
\ [ 'gitbranch' ] ]
|
||||
\ },
|
||||
\ 'component_function': {
|
||||
\ 'cocstatus': 'coc#status',
|
||||
\ 'currentfunction': 'CocCurrentFunction',
|
||||
\ 'gitbranch': 'FugitiveHead'
|
||||
\ },
|
||||
\ }
|
||||
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
27
common/neovim/nerdtree.nix
Normal file
27
common/neovim/nerdtree.nix
Normal file
|
@ -0,0 +1,27 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
{
|
||||
plugin = nerdtree;
|
||||
config = ''
|
||||
nnoremap <C-right> <C-W><C-l>
|
||||
nnoremap <C-left> <C-W><C-h>
|
||||
nnoremap <C-up> <C-W><C-k>
|
||||
nnoremap <C-down> <C-W><C-j>
|
||||
nnoremap <C-T> :NERDTreeToggle<CR>
|
||||
nnoremap <C-R> :NERDTreeFocus<CR>
|
||||
" Exit Vim if NERDTree is the only window remaining in the only tab.
|
||||
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
|
||||
|
||||
" 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
|
||||
" If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree.
|
||||
autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 |
|
||||
\ let buf=bufnr() | buffer# | execute "normal! \<C-W>w" | execute 'buffer'.buf | endif
|
||||
'';
|
||||
}
|
||||
nerdtree-git-plugin
|
||||
];
|
||||
};
|
||||
}
|
296
common/neovim/nvimrc.nix
Normal file
296
common/neovim/nvimrc.nix
Normal file
|
@ -0,0 +1,296 @@
|
|||
''
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => General
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
set mouse=a
|
||||
" Sets how many lines of history VIM has to remember
|
||||
set history=500
|
||||
|
||||
" Enable filetype plugins
|
||||
filetype plugin on
|
||||
filetype indent on
|
||||
|
||||
" Set to auto read when a file is changed from the outside
|
||||
set autoread
|
||||
au FocusGained,BufEnter * checktime
|
||||
|
||||
" Fast saving
|
||||
nmap <leader>s :w!<cr>
|
||||
|
||||
" :W sudo saves the file
|
||||
" (useful for handling the permission-denied error)
|
||||
command! W execute 'w !sudo tee % > /dev/null' <bar> edit!
|
||||
|
||||
" clipboard
|
||||
set clipboard^=unnamed,unnamedplus
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => VIM user interface
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Set 7 lines to the cursor - when moving vertically using j/k
|
||||
set so=7
|
||||
|
||||
" Avoid garbled characters in Chinese language windows OS
|
||||
let $LANG='en'
|
||||
set langmenu=en
|
||||
source $VIMRUNTIME/delmenu.vim
|
||||
source $VIMRUNTIME/menu.vim
|
||||
|
||||
" Turn on the Wild menu
|
||||
set wildmenu
|
||||
|
||||
set relativenumber
|
||||
|
||||
" Ignore compiled files
|
||||
set wildignore=*.o,*~,*.pyc
|
||||
if has("win16") || has("win32")
|
||||
set wildignore+=.git\*,.hg\*,.svn\*
|
||||
else
|
||||
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
|
||||
endif
|
||||
|
||||
"Always show current position
|
||||
set ruler
|
||||
|
||||
" Height of the command bar
|
||||
set cmdheight=1
|
||||
|
||||
" A buffer becomes hidden when it is abandoned
|
||||
set hid
|
||||
|
||||
" Configure backspace so it acts as it should act
|
||||
set backspace=eol,start,indent
|
||||
set whichwrap+=<,>,h,l
|
||||
|
||||
" Ignore case when searching
|
||||
set ignorecase
|
||||
|
||||
" When searching try to be smart about cases
|
||||
set smartcase
|
||||
|
||||
" Highlight search results
|
||||
set hlsearch
|
||||
|
||||
" Makes search act like search in modern browsers
|
||||
set incsearch
|
||||
|
||||
" Don't redraw while executing macros (good performance config)
|
||||
set lazyredraw
|
||||
|
||||
" For regular expressions turn magic on
|
||||
set magic
|
||||
|
||||
" Show matching brackets when text indicator is over them
|
||||
set showmatch
|
||||
" How many tenths of a second to blink when matching brackets
|
||||
set mat=2
|
||||
|
||||
" No annoying sound on errors
|
||||
set noerrorbells
|
||||
set novisualbell
|
||||
set t_vb=
|
||||
set tm=500
|
||||
|
||||
" Properly disable sound on errors on MacVim
|
||||
if has("gui_macvim")
|
||||
autocmd GUIEnter * set vb t_vb=
|
||||
endif
|
||||
|
||||
|
||||
" Add a bit extra margin to the left
|
||||
set foldcolumn=1
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Colors and Fonts
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Enable syntax highlighting
|
||||
syntax enable
|
||||
|
||||
" Enable 256 colors palette in Gnome Terminal
|
||||
if $COLORTERM == 'gnome-terminal'
|
||||
set t_Co=256
|
||||
endif
|
||||
|
||||
try
|
||||
colorscheme solarized8_high
|
||||
catch
|
||||
endtry
|
||||
|
||||
set background=dark
|
||||
|
||||
" Set extra options when running in GUI mode
|
||||
if has("gui_running")
|
||||
set guioptions-=T
|
||||
set guioptions-=e
|
||||
set t_Co=256
|
||||
set guitablabel=%M\ %t
|
||||
endif
|
||||
|
||||
" Set utf8 as standard encoding and en_US as the standard language
|
||||
set encoding=utf8
|
||||
|
||||
" Use Unix as the standard file type
|
||||
set ffs=unix,dos,mac
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Files, backups and undo
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Turn backup off, since most stuff is in SVN, git etc. anyway...
|
||||
set nobackup
|
||||
set nowb
|
||||
set noswapfile
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Text, tab and indent related
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Use spaces instead of tabs
|
||||
set expandtab
|
||||
|
||||
" Be smart when using tabs ;)
|
||||
set smarttab
|
||||
|
||||
" 1 tab == 4 spaces
|
||||
set shiftwidth=4
|
||||
set tabstop=4
|
||||
|
||||
" Linebreak on 500 characters
|
||||
set lbr
|
||||
set tw=500
|
||||
|
||||
set ai "Auto indent
|
||||
set si "Smart indent
|
||||
set wrap "Wrap lines
|
||||
|
||||
|
||||
""""""""""""""""""""""""""""""
|
||||
" => Visual mode related
|
||||
""""""""""""""""""""""""""""""
|
||||
" Visual mode pressing * or # searches for the current selection
|
||||
" Super useful! From an idea by Michael Naumann
|
||||
vnoremap <silent> * :<C-u>call VisualSelection(''\'', ''\'')<CR>/<C-R>=@/<CR><CR>
|
||||
vnoremap <silent> # :<C-u>call VisualSelection(''\'', ''\'')<CR>?<C-R>=@/<CR><CR>
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Moving around, tabs, windows and buffers
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search)
|
||||
"map <space> /
|
||||
"map <C-space> ?
|
||||
|
||||
" Disable highlight when <leader><cr> is pressed
|
||||
"map <silent> <leader><cr> :noh<cr>
|
||||
|
||||
" Smart way to move between windows
|
||||
"map <C-j> <C-W>j
|
||||
"map <C-k> <C-W>k
|
||||
"map <C-h> <C-W>h
|
||||
"map <C-l> <C-W>l
|
||||
|
||||
" Close the current buffer
|
||||
"map <leader>bd :Bclose<cr>:tabclose<cr>gT
|
||||
|
||||
" Close all the buffers
|
||||
"map <leader>ba :bufdo bd<cr>
|
||||
|
||||
"map <leader>bl :bnext<cr>
|
||||
"map <leader>bh :bprevious<cr>
|
||||
|
||||
" Useful mappings for managing tabs
|
||||
"map <leader>tn :tabnew<cr>
|
||||
"map <leader>to :tabonly<cr>
|
||||
"map <leader>tc :tabclose<cr>
|
||||
"map <leader>tm :tabmove
|
||||
"map <leader>t<leader> :tabnext
|
||||
|
||||
" Let 'tl' toggle between this and the last accessed tab
|
||||
"let g:lasttab = 1
|
||||
"nmap <Leader>tl :exe "tabn ".g:lasttab<CR>
|
||||
"au TabLeave * let g:lasttab = tabpagenr()
|
||||
|
||||
|
||||
" Opens a new tab with the current buffer's path
|
||||
" Super useful when editing files in the same directory
|
||||
"map <leader>te :tabedit <C-r>=expand("%:p:h")<cr>/
|
||||
|
||||
" Switch CWD to the directory of the open buffer
|
||||
"map <leader>cd :cd %:p:h<cr>:pwd<cr>
|
||||
|
||||
" Specify the behavior when switching between buffers
|
||||
"try
|
||||
" set switchbuf=useopen,usetab,newtab
|
||||
" set stal=2
|
||||
"catch
|
||||
"endtry
|
||||
|
||||
" Return to last edit position when opening files (You want this!)
|
||||
"au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
|
||||
|
||||
|
||||
""""""""""""""""""""""""""""""
|
||||
" => Status line
|
||||
""""""""""""""""""""""""""""""
|
||||
" Always show the status line
|
||||
"set laststatus=2
|
||||
|
||||
" Format the status line
|
||||
"set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Editing mappings
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Remap VIM 0 to first non-blank character
|
||||
"map 0 ^
|
||||
|
||||
" Move a line of text using ALT+[jk] or Command+[jk] on mac
|
||||
"nmap <M-j> mz:m+<cr>`z
|
||||
"nmap <M-k> mz:m-2<cr>`z
|
||||
"vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
|
||||
"vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z
|
||||
|
||||
"if has("mac") || has("macunix")
|
||||
" nmap <D-j> <M-j>
|
||||
" nmap <D-k> <M-k>
|
||||
" vmap <D-j> <M-j>
|
||||
" vmap <D-k> <M-k>
|
||||
"endif
|
||||
|
||||
"" Delete trailing white space on save, useful for some filetypes ;)
|
||||
"fun! CleanExtraSpaces()
|
||||
" let save_cursor = getpos(".")
|
||||
" let old_query = getreg('/')
|
||||
" silent! %s/\s\+$//e
|
||||
" call setpos('.', save_cursor)
|
||||
" call setreg('/', old_query)
|
||||
"endfun
|
||||
|
||||
"if has("autocmd")
|
||||
" autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces()
|
||||
"endif
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => EXTRAS BY LEON
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
" Better splitting
|
||||
set splitbelow
|
||||
set splitright
|
||||
" Enable mouse
|
||||
|
||||
set noshowmode
|
||||
|
||||
augroup neovim_terminal
|
||||
autocmd!
|
||||
" Enter Terminal-mode (insert) automatically
|
||||
autocmd TermOpen * startinsert
|
||||
" Disables number lines on terminal buffers
|
||||
autocmd TermOpen * :set nonumber norelativenumber
|
||||
" allows you to use Ctrl-c on terminal window
|
||||
autocmd TermOpen * nnoremap <buffer> <C-c> i<C-c>
|
||||
augroup END
|
||||
''
|
38
common/neovim/telescope.nix
Normal file
38
common/neovim/telescope.nix
Normal file
|
@ -0,0 +1,38 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
{
|
||||
plugin = telescope-nvim;
|
||||
type = "lua";
|
||||
config = ''
|
||||
local telescope = require('telescope')
|
||||
telescope.setup {
|
||||
extensions = {
|
||||
coc = {
|
||||
theme = 'ivy',
|
||||
prefer_locations = true, -- always use Telescope locations to preview definitions/declarations/implementations etc
|
||||
}
|
||||
},
|
||||
}
|
||||
telescope.load_extension('hoogle')
|
||||
telescope.load_extension('coc')
|
||||
function map (mode, shortcut, command)
|
||||
vim.api.nvim_set_keymap(mode, shortcut, command, { noremap = true, silent = true })
|
||||
end
|
||||
map('n', "<leader>ff", ":Telescope find_files<cr>")
|
||||
map('n', "<leader>fg", ":Telescope live_grep<cr>")
|
||||
map('n', "<leader>fb", ":Telescope buffers<cr>")
|
||||
map('n', "<leader>fH", ":Telescope help_tags<cr>")
|
||||
map('n', "<leader>fd", ":Telescope lsp_definitions<cr>")
|
||||
map('n', "<leader>fs", ":Telescope lsp_document_symbols<cr>")
|
||||
map('n', "<leader>fS", ":Telescope lsp_workspace_symbols<cr>")
|
||||
map('n', "<leader>fh", ":Telescope hoogle<cr>")
|
||||
'';
|
||||
}
|
||||
telescope-coc-nvim
|
||||
telescope_hoogle
|
||||
plenary-nvim
|
||||
];
|
||||
};
|
||||
}
|
13
common/neovim/treesitter.nix
Normal file
13
common/neovim/treesitter.nix
Normal file
|
@ -0,0 +1,13 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
nvim-treesitter
|
||||
nvim-treesitter-parsers.haskell
|
||||
nvim-treesitter-parsers.latex
|
||||
nvim-treesitter-parsers.bibtex
|
||||
nvim-treesitter-parsers.rust
|
||||
nvim-treesitter-parsers.agda
|
||||
];
|
||||
};
|
||||
}
|
17
common/starship.nix
Executable file
17
common/starship.nix
Executable file
|
@ -0,0 +1,17 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
format = "$all";
|
||||
palette = "catppuccin_macchiato";
|
||||
gradle.symbol = "🐘";
|
||||
} // builtins.fromTOML (builtins.readFile
|
||||
(pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "starship";
|
||||
rev = "5629d2356f62a9f2f8efad3ff37476c19969bd4f";
|
||||
sha256 = "sha256-nsRuxQFKbQkyEI4TXgvAjcroVdG+heKX5Pauq/4Ota0=";
|
||||
} + /palettes/macchiato.toml));
|
||||
};
|
||||
}
|
28
common/vim.nix
Normal file
28
common/vim.nix
Normal file
|
@ -0,0 +1,28 @@
|
|||
{ pkgs, ...}:
|
||||
{
|
||||
programs.vim = {
|
||||
enable = true;
|
||||
extraConfig = import ./vimrc.nix;
|
||||
plugins = with pkgs.vimPlugins; [
|
||||
# specific language support
|
||||
vim-nix
|
||||
Coqtail
|
||||
vimtex
|
||||
|
||||
# general plugins
|
||||
nerdtree
|
||||
fugitive
|
||||
nerdtree-git-plugin
|
||||
vim-lsp
|
||||
vim-snippets
|
||||
lightline-vim
|
||||
vim-colorschemes
|
||||
|
||||
# CoC
|
||||
coc-nvim
|
||||
coc-git
|
||||
coc-snippets
|
||||
];
|
||||
defaultEditor = true;
|
||||
};
|
||||
}
|
604
common/vimrc.nix
Normal file
604
common/vimrc.nix
Normal file
|
@ -0,0 +1,604 @@
|
|||
''
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Maintainer:
|
||||
" Amir Salihefendic - @amix3k
|
||||
" Forked by:
|
||||
" Leon Vatthauer - @reijix
|
||||
"
|
||||
" Sections:
|
||||
" -> General
|
||||
" -> VIM user interface
|
||||
" -> Colors and Fonts
|
||||
" -> Files and backups
|
||||
" -> Text, tab and indent related
|
||||
" -> Visual mode related
|
||||
" -> Moving around, tabs and buffers
|
||||
" -> Status line
|
||||
" -> Editing mappings
|
||||
" -> vimgrep searching and cope displaying
|
||||
" -> Spell checking
|
||||
" -> Misc
|
||||
" -> Helper functions
|
||||
"
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => General
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Sets how many lines of history VIM has to remember
|
||||
set history=500
|
||||
|
||||
" Enable filetype plugins
|
||||
filetype plugin on
|
||||
filetype indent on
|
||||
|
||||
" Set to auto read when a file is changed from the outside
|
||||
set autoread
|
||||
au FocusGained,BufEnter * checktime
|
||||
|
||||
" With a map leader it's possible to do extra key combinations
|
||||
" like <leader>w saves the current file
|
||||
let mapleader = ","
|
||||
|
||||
" Fast saving
|
||||
nmap <leader>w :w!<cr>
|
||||
|
||||
" :W sudo saves the file
|
||||
" (useful for handling the permission-denied error)
|
||||
command! W execute 'w !sudo tee % > /dev/null' <bar> edit!
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => VIM user interface
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Set 7 lines to the cursor - when moving vertically using j/k
|
||||
set so=7
|
||||
|
||||
" Avoid garbled characters in Chinese language windows OS
|
||||
let $LANG='en'
|
||||
set langmenu=en
|
||||
source $VIMRUNTIME/delmenu.vim
|
||||
source $VIMRUNTIME/menu.vim
|
||||
|
||||
" Turn on the Wild menu
|
||||
set wildmenu
|
||||
|
||||
" Ignore compiled files
|
||||
set wildignore=*.o,*~,*.pyc
|
||||
if has("win16") || has("win32")
|
||||
set wildignore+=.git\*,.hg\*,.svn\*
|
||||
else
|
||||
set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
|
||||
endif
|
||||
|
||||
" Always show current position
|
||||
set ruler
|
||||
set relativenumber
|
||||
|
||||
" Height of the command bar
|
||||
set cmdheight=1
|
||||
|
||||
" A buffer becomes hidden when it is abandoned
|
||||
set hid
|
||||
|
||||
" Configure backspace so it acts as it should act
|
||||
set backspace=eol,start,indent
|
||||
set whichwrap+=<,>,h,l
|
||||
|
||||
" Ignore case when searching
|
||||
set ignorecase
|
||||
|
||||
" When searching try to be smart about cases
|
||||
set smartcase
|
||||
|
||||
" Highlight search results
|
||||
set hlsearch
|
||||
|
||||
" Makes search act like search in modern browsers
|
||||
set incsearch
|
||||
|
||||
" Don't redraw while executing macros (good performance config)
|
||||
set lazyredraw
|
||||
|
||||
" For regular expressions turn magic on
|
||||
set magic
|
||||
|
||||
" Show matching brackets when text indicator is over them
|
||||
set showmatch
|
||||
|
||||
" How many tenths of a second to blink when matching brackets
|
||||
set mat=2
|
||||
|
||||
" No annoying sound on errors
|
||||
set noerrorbells
|
||||
set novisualbell
|
||||
set t_vb=
|
||||
set tm=500
|
||||
|
||||
" Properly disable sound on errors on MacVim
|
||||
if has("gui_macvim")
|
||||
autocmd GUIEnter * set vb t_vb=
|
||||
endif
|
||||
|
||||
" Add a bit extra margin to the left
|
||||
set foldcolumn=1
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Colors and Fonts
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Enable syntax highlighting
|
||||
syntax enable
|
||||
|
||||
" Set regular expression engine automatically
|
||||
set regexpengine=0
|
||||
|
||||
" Enable 256 colors palette in Gnome Terminal
|
||||
"if $COLORTERM == 'gnome-terminal'
|
||||
" set t_Co=256
|
||||
"endif
|
||||
|
||||
" termcolors for theme
|
||||
set termguicolors
|
||||
|
||||
try
|
||||
colorscheme molokai
|
||||
catch
|
||||
endtry
|
||||
|
||||
set background=dark
|
||||
|
||||
" Set extra options when running in GUI mode
|
||||
if has("gui_running")
|
||||
set guioptions-=T
|
||||
set guioptions-=e
|
||||
set t_Co=256
|
||||
set guitablabel=%M\ %t
|
||||
endif
|
||||
|
||||
" Set utf8 as standard encoding and en_US as the standard language
|
||||
set encoding=utf8
|
||||
|
||||
" Use Unix as the standard file type
|
||||
set ffs=unix,dos,mac
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Files, backups and undo
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Turn backup off, since most stuff is in SVN, git etc. anyway...
|
||||
set nobackup
|
||||
set nowb
|
||||
set noswapfile
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Text, tab and indent related
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Use spaces instead of tabs
|
||||
set expandtab
|
||||
|
||||
" Be smart when using tabs ;)
|
||||
set smarttab
|
||||
|
||||
" 1 tab == 4 spaces
|
||||
set shiftwidth=4
|
||||
set tabstop=4
|
||||
|
||||
" Linebreak on 500 characters
|
||||
set lbr
|
||||
set tw=500
|
||||
|
||||
set ai "Auto indent
|
||||
set si "Smart indent
|
||||
set wrap "Wrap lines
|
||||
|
||||
|
||||
""""""""""""""""""""""""""""""
|
||||
" => Visual mode related
|
||||
""""""""""""""""""""""""""""""
|
||||
" Visual mode pressing * or # searches for the current selection
|
||||
" Super useful! From an idea by Michael Naumann
|
||||
vnoremap <silent> * :<C-u>call VisualSelection(''\'', ''\'')<CR>/<C-R>=@/<CR><CR>
|
||||
vnoremap <silent> # :<C-u>call VisualSelection(''\'', ''\'')<CR>?<C-R>=@/<CR><CR>
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Moving around, tabs, windows and buffers
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search)
|
||||
map <space> /
|
||||
map <C-space> ?
|
||||
|
||||
" Disable highlight when <leader><cr> is pressed
|
||||
map <silent> <leader><cr> :noh<cr>
|
||||
|
||||
" Smart way to move between windows
|
||||
map <C-j> <C-W>j
|
||||
map <C-k> <C-W>k
|
||||
map <C-h> <C-W>h
|
||||
map <C-l> <C-W>l
|
||||
|
||||
" Close the current buffer
|
||||
map <leader>bd :Bclose<cr>:tabclose<cr>gT
|
||||
|
||||
" Close all the buffers
|
||||
map <leader>ba :bufdo bd<cr>
|
||||
|
||||
map <leader>l :bnext<cr>
|
||||
map <leader>h :bprevious<cr>
|
||||
|
||||
" Useful mappings for managing tabs
|
||||
map <leader>tn :tabnew<cr>
|
||||
map <leader>to :tabonly<cr>
|
||||
map <leader>tc :tabclose<cr>
|
||||
map <leader>tm :tabmove
|
||||
map <leader>t<leader> :tabnext<cr>
|
||||
|
||||
" Let 'tl' toggle between this and the last accessed tab
|
||||
let g:lasttab = 1
|
||||
nmap <leader>tl :exe "tabn ".g:lasttab<CR>
|
||||
au TabLeave * let g:lasttab = tabpagenr()
|
||||
|
||||
|
||||
" Opens a new tab with the current buffer's path
|
||||
" Super useful when editing files in the same directory
|
||||
map <leader>te :tabedit <C-r>=escape(expand("%:p:h"), " ")<cr>/
|
||||
|
||||
" Switch CWD to the directory of the open buffer
|
||||
map <leader>cd :cd %:p:h<cr>:pwd<cr>
|
||||
|
||||
" Specify the behavior when switching between buffers
|
||||
try
|
||||
set switchbuf=useopen,usetab,newtab
|
||||
set stal=2
|
||||
catch
|
||||
endtry
|
||||
|
||||
" Return to last edit position when opening files (You want this!)
|
||||
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
|
||||
|
||||
|
||||
""""""""""""""""""""""""""""""
|
||||
" => Status line
|
||||
""""""""""""""""""""""""""""""
|
||||
" Always show the status line
|
||||
set laststatus=2
|
||||
|
||||
" Format the status line
|
||||
set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Editing mappings
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Remap VIM 0 to first non-blank character
|
||||
map 0 ^
|
||||
|
||||
" Move a line of text using ALT+[jk] or Command+[jk] on mac
|
||||
nmap <M-j> mz:m+<cr>`z
|
||||
nmap <M-k> mz:m-2<cr>`z
|
||||
vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
|
||||
vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z
|
||||
|
||||
if has("mac") || has("macunix")
|
||||
nmap <D-j> <M-j>
|
||||
nmap <D-k> <M-k>
|
||||
vmap <D-j> <M-j>
|
||||
vmap <D-k> <M-k>
|
||||
endif
|
||||
|
||||
" Delete trailing white space on save, useful for some filetypes ;)
|
||||
fun! CleanExtraSpaces()
|
||||
let save_cursor = getpos(".")
|
||||
let old_query = getreg('/')
|
||||
silent! %s/\s\+$//e
|
||||
call setpos('.', save_cursor)
|
||||
call setreg('/', old_query)
|
||||
endfun
|
||||
|
||||
if has("autocmd")
|
||||
autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces()
|
||||
endif
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Spell checking
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Pressing ,ss will toggle and untoggle spell checking
|
||||
map <leader>ss :setlocal spell!<cr>
|
||||
|
||||
" Shortcuts using <leader>
|
||||
map <leader>sn ]s
|
||||
map <leader>sp [s
|
||||
map <leader>sa zg
|
||||
map <leader>s? z=
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Misc
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Remove the Windows ^M - when the encodings gets messed up
|
||||
noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm
|
||||
|
||||
" Quickly open a buffer for scribble
|
||||
map <leader>q :e ~/buffer<cr>
|
||||
|
||||
" Quickly open a markdown buffer for scribble
|
||||
map <leader>x :e ~/buffer.md<cr>
|
||||
|
||||
" Toggle paste mode on and off
|
||||
map <leader>pp :setlocal paste!<cr>
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Helper functions
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" Returns true if paste mode is enabled
|
||||
function! HasPaste()
|
||||
if &paste
|
||||
return 'PASTE MODE '
|
||||
endif
|
||||
return ''\''
|
||||
endfunction
|
||||
|
||||
" Don't close window, when deleting a buffer
|
||||
command! Bclose call <SID>BufcloseCloseIt()
|
||||
function! <SID>BufcloseCloseIt()
|
||||
let l:currentBufNum = bufnr("%")
|
||||
let l:alternateBufNum = bufnr("#")
|
||||
|
||||
if buflisted(l:alternateBufNum)
|
||||
buffer #
|
||||
else
|
||||
bnext
|
||||
endif
|
||||
|
||||
if bufnr("%") == l:currentBufNum
|
||||
new
|
||||
endif
|
||||
|
||||
if buflisted(l:currentBufNum)
|
||||
execute("bdelete! ".l:currentBufNum)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! CmdLine(str)
|
||||
call feedkeys(":" . a:str)
|
||||
endfunction
|
||||
|
||||
function! VisualSelection(direction, extra_filter) range
|
||||
let l:saved_reg = @"
|
||||
execute "normal! vgvy"
|
||||
|
||||
let l:pattern = escape(@", "\\/.*'$^~[]")
|
||||
let l:pattern = substitute(l:pattern, "\n$", "", "")
|
||||
|
||||
if a:direction == 'gv'
|
||||
call CmdLine("Ack '" . l:pattern . "' " )
|
||||
elseif a:direction == 'replace'
|
||||
call CmdLine("%s" . '/'. l:pattern . '/')
|
||||
endif
|
||||
|
||||
let @/ = l:pattern
|
||||
let @" = l:saved_reg
|
||||
endfunction
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => EXTRAS BY LEON
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
" Better splitting
|
||||
set splitbelow
|
||||
set splitright
|
||||
" Enable mouse
|
||||
set mouse=a
|
||||
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => COQ
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
nnoremap <C-down> <Plug>CoqNext<Plug>CoqJumpToEnd
|
||||
nnoremap <C-up> <Plug>CoqUndo<Plug>CoqJumpToEnd
|
||||
nnoremap <C-right> <Plug>CoqToLine
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => NERDTree
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
nnoremap <C-W><right> <C-W><C-l>
|
||||
nnoremap <C-W><left> <C-W><C-h>
|
||||
nnoremap <C-T> :NERDTreeToggle<CR>
|
||||
" Exit Vim if NERDTree is the only window remaining in the only tab.
|
||||
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif
|
||||
|
||||
" 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
|
||||
" If another buffer tries to replace NERDTree, put it in the other window, and bring back NERDTree.
|
||||
autocmd BufEnter * if bufname('#') =~ 'NERD_tree_\d\+' && bufname('%') !~ 'NERD_tree_\d\+' && winnr('$') > 1 |
|
||||
\ let buf=bufnr() | buffer# | execute "normal! \<C-W>w" | execute 'buffer'.buf | endif
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => CoC
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
" Having longer updatetime (default is 4000 ms = 4s) leads to noticeable
|
||||
" delays and poor user experience
|
||||
set updatetime=300
|
||||
|
||||
" Always show the signcolumn, otherwise it would shift the text each time
|
||||
" diagnostics appear/become resolved
|
||||
set signcolumn=yes
|
||||
|
||||
" Use tab for trigger completion with characters ahead and navigate
|
||||
" NOTE: There's always complete item selected by default, you may want to enable
|
||||
" no select by `"suggest.noselect": true` in your configuration file
|
||||
" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by
|
||||
" other plugin before putting this into your config
|
||||
inoremap <silent><expr> <TAB>
|
||||
\ coc#pum#visible() ? coc#pum#next(1) :
|
||||
\ CheckBackspace() ? "\<Tab>" :
|
||||
\ coc#refresh()
|
||||
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
|
||||
|
||||
" Make <CR> to accept selected completion item or notify coc.nvim to format
|
||||
" <C-g>u breaks current undo, please make your own choice
|
||||
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
|
||||
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
|
||||
|
||||
function! CheckBackspace() abort
|
||||
let col = col('.') - 1
|
||||
return !col || getline('.')[col - 1] =~# '\s'
|
||||
endfunction
|
||||
|
||||
" Use <c-space> to trigger completion
|
||||
if has('nvim')
|
||||
inoremap <silent><expr> <c-space> coc#refresh()
|
||||
else
|
||||
inoremap <silent><expr> <c-@> coc#refresh()
|
||||
endif
|
||||
|
||||
" Use `[g` and `]g` to navigate diagnostics
|
||||
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
|
||||
nmap <silent> [g <Plug>(coc-diagnostic-prev)
|
||||
nmap <silent> ]g <Plug>(coc-diagnostic-next)
|
||||
|
||||
" GoTo code navigation
|
||||
nmap <silent> gd <Plug>(coc-definition)
|
||||
nmap <silent> gy <Plug>(coc-type-definition)
|
||||
nmap <silent> gi <Plug>(coc-implementation)
|
||||
nmap <silent> gr <Plug>(coc-references)
|
||||
|
||||
" Use K to show documentation in preview window
|
||||
nnoremap <silent> K :call ShowDocumentation()<CR>
|
||||
|
||||
function! ShowDocumentation()
|
||||
if CocAction('hasProvider', 'hover')
|
||||
call CocActionAsync('doHover')
|
||||
else
|
||||
call feedkeys('K', 'in')
|
||||
endif
|
||||
endfunction
|
||||
|
||||
" Highlight the symbol and its references when holding the cursor
|
||||
autocmd CursorHold * silent call CocActionAsync('highlight')
|
||||
|
||||
" Symbol renaming
|
||||
nmap <leader>rn <Plug>(coc-rename)
|
||||
|
||||
" Formatting selected code
|
||||
xmap <leader>f <Plug>(coc-format-selected)
|
||||
nmap <leader>f <Plug>(coc-format-selected)
|
||||
|
||||
augroup mygroup
|
||||
autocmd!
|
||||
" Setup formatexpr specified filetype(s)
|
||||
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
|
||||
" Update signature help on jump placeholder
|
||||
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
|
||||
augroup end
|
||||
|
||||
" Applying code actions to the selected code block
|
||||
" Example: `<leader>aap` for current paragraph
|
||||
xmap <leader>a <Plug>(coc-codeaction-selected)
|
||||
nmap <leader>a <Plug>(coc-codeaction-selected)
|
||||
|
||||
" Remap keys for applying code actions at the cursor position
|
||||
nmap <leader>ac <Plug>(coc-codeaction-cursor)
|
||||
" Remap keys for apply code actions affect whole buffer
|
||||
nmap <leader>as <Plug>(coc-codeaction-source)
|
||||
" Apply the most preferred quickfix action to fix diagnostic on the current line
|
||||
nmap <leader>qf <Plug>(coc-fix-current)
|
||||
|
||||
" Remap keys for applying refactor code actions
|
||||
nmap <silent> <leader>re <Plug>(coc-codeaction-refactor)
|
||||
xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
|
||||
nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
|
||||
|
||||
" Run the Code Lens action on the current line
|
||||
nmap <leader>cl <Plug>(coc-codelens-action)
|
||||
|
||||
" Map function and class text objects
|
||||
" NOTE: Requires 'textDocument.documentSymbol' support from the language server
|
||||
xmap if <Plug>(coc-funcobj-i)
|
||||
omap if <Plug>(coc-funcobj-i)
|
||||
xmap af <Plug>(coc-funcobj-a)
|
||||
omap af <Plug>(coc-funcobj-a)
|
||||
xmap ic <Plug>(coc-classobj-i)
|
||||
omap ic <Plug>(coc-classobj-i)
|
||||
xmap ac <Plug>(coc-classobj-a)
|
||||
omap ac <Plug>(coc-classobj-a)
|
||||
|
||||
" Remap <C-f> and <C-b> to scroll float windows/popups
|
||||
if has('nvim-0.4.0') || has('patch-8.2.0750')
|
||||
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
|
||||
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
|
||||
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
|
||||
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
|
||||
endif
|
||||
|
||||
" Use CTRL-S for selections ranges
|
||||
" Requires 'textDocument/selectionRange' support of language server
|
||||
nmap <silent> <C-s> <Plug>(coc-range-select)
|
||||
xmap <silent> <C-s> <Plug>(coc-range-select)
|
||||
|
||||
" Add `:Format` command to format current buffer
|
||||
command! -nargs=0 Format :call CocActionAsync('format')
|
||||
|
||||
" Add `:Fold` command to fold current buffer
|
||||
command! -nargs=? Fold :call CocAction('fold', <f-args>)
|
||||
|
||||
" Add `:OR` command for organize imports of the current buffer
|
||||
command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport')
|
||||
|
||||
" Add (Neo)Vim's native statusline support
|
||||
" NOTE: Please see `:h coc-status` for integrations with external plugins that
|
||||
" provide custom statusline: lightline.vim, vim-airline
|
||||
|
||||
" Mappings for CoCList
|
||||
" Show all diagnostics
|
||||
nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>
|
||||
" Manage extensions
|
||||
nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>
|
||||
" Show commands
|
||||
nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>
|
||||
" Find symbol of current document
|
||||
nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>
|
||||
" Search workspace symbols
|
||||
nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>
|
||||
" Do default action for next item
|
||||
nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>
|
||||
" Do default action for previous item
|
||||
nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>
|
||||
" Resume latest coc list
|
||||
nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
|
||||
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
" => Lightline
|
||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
||||
function! CocCurrentFunction()
|
||||
return get(b:, 'coc_current_function', ''\'')
|
||||
endfunction
|
||||
|
||||
let g:lightline = {
|
||||
\ 'colorscheme': 'molokai',
|
||||
\ 'active': {
|
||||
\ 'left': [ [ 'mode', 'paste' ],
|
||||
\ [ 'cocstatus', 'currentfunction', 'readonly', 'filename', 'modified' ],
|
||||
\ [ 'gitbranch' ] ]
|
||||
\ },
|
||||
\ 'component_function': {
|
||||
\ 'cocstatus': 'coc#status',
|
||||
\ 'currentfunction': 'CocCurrentFunction',
|
||||
\ 'gitbranch': 'FugitiveHead'
|
||||
\ },
|
||||
\ }
|
||||
|
||||
set noshowmode
|
||||
|
||||
''
|
103
common/vscode.nix
Executable file
103
common/vscode.nix
Executable file
|
@ -0,0 +1,103 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
extensions = with pkgs.vscode-extensions; [
|
||||
jdinhlife.gruvbox
|
||||
vscodevim.vim
|
||||
yzhang.markdown-all-in-one
|
||||
haskell.haskell
|
||||
justusadam.language-haskell
|
||||
maximedenes.vscoq
|
||||
james-yu.latex-workshop
|
||||
bbenoist.nix
|
||||
mkhl.direnv
|
||||
catppuccin.catppuccin-vsc
|
||||
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
|
||||
{
|
||||
name = "theme-panda";
|
||||
publisher = "tinkertrain";
|
||||
version = "1.3.0";
|
||||
sha256 = "sha256-ijOXoby3FHgDhF2sibXnGpkldKNPCoEXCY0Iw0ndUtw=";
|
||||
}
|
||||
{
|
||||
name = "agda-mode";
|
||||
publisher = "banacorn";
|
||||
version = "0.4.1";
|
||||
sha256 = "sha256-Zt2OifhS5BI0HcMZkKOa1gqV9Vpj0lIUR6VcHvX5M9o=";
|
||||
}
|
||||
{
|
||||
name = "yuck";
|
||||
publisher = "eww-yuck";
|
||||
version = "0.0.3";
|
||||
sha256 = "sha256-DITgLedaO0Ifrttu+ZXkiaVA7Ua5RXc4jXQHPYLqrcM=";
|
||||
}
|
||||
];
|
||||
userSettings = {
|
||||
"agdaMode.connection.agdaLanguageServer" = false;
|
||||
"agdaMode.highlighting.getHighlightWithThemeColors" = false;
|
||||
"editor.unicodeHighlight.ambiguousCharacters" = false;
|
||||
"editor.semanticHighlighting.enabled" = true;
|
||||
"workbench.colorTheme" = "Catppuccin Mocha";
|
||||
# "workbench.iconTheme" = "catppuccin-mocha";
|
||||
"haskell.manageHLS" = "PATH";
|
||||
"editor.fontFamily" = "Berkeley Mono, DejaVu Sans Mono, monospace, Unifont";
|
||||
"terminal.integrated.minimumContrastRatio" = 1;
|
||||
"terminal.integrated.shellIntegration.enabled" = false;
|
||||
"terminal.integrated.profiles.linux" = {
|
||||
bash = null;
|
||||
zsh = {
|
||||
path = "/run/current-system/sw/bin/zsh";
|
||||
icon = "terminal-linux";
|
||||
};
|
||||
};
|
||||
"terminal.integrated.defaultProfile.linux" = "zsh";
|
||||
"vim.handleKeys" = {
|
||||
"<C-c>" = false;
|
||||
"<C-x>" = false;
|
||||
"<C-s>" = false;
|
||||
"<C-v>" = false;
|
||||
"<C-a>" = false;
|
||||
"<C-d>" = false;
|
||||
};
|
||||
"vim.overrideCopy" = false;
|
||||
"window.titleBarStyle" = "custom";
|
||||
"window.customMenuBarAltFocus" = false;
|
||||
"window.enableMenuBarMnemonics" = false;
|
||||
#"ltex.additionalRules.motherTongue" = "de-DE";
|
||||
#"ltex.language" = "de-DE";
|
||||
#"ltex.ltex-ls.path" = "/etc/profiles/per-user/leonv/";
|
||||
"ltex.java.path" = "/etc/profiles/per-user/leonv/";
|
||||
#"ltex.sentenceCacheSize" = 50000;
|
||||
#"ltex.java.maximumHeapSize" = 8192;
|
||||
"editor.tabSize" = 2;
|
||||
"explorer.excludeGitIgnore" = true;
|
||||
"files.exclude" = {
|
||||
"**/*.agdai" = true;
|
||||
};
|
||||
# try to fix agda suggestions:
|
||||
"editor.acceptSuggestionOnCommitCharacter" = false;
|
||||
"editor.minimap.enabled" = false;
|
||||
"editor.autoClosingOvertype" = "never";
|
||||
"editor.autoClosingBrackets" = "never";
|
||||
"editor.accessibilitySupport" = "off";
|
||||
};
|
||||
keybindings = [
|
||||
{
|
||||
key = "ctrl+shift+v";
|
||||
command = "extension.vim_ctrl+v";
|
||||
when = "editorTextFocus && vim.active && !inDebugRepl";
|
||||
}
|
||||
{
|
||||
key = "ctrl+shift+=";
|
||||
command = "editor.action.fontZoomIn";
|
||||
when = "";
|
||||
}
|
||||
{
|
||||
key = "ctrl+shift+-";
|
||||
command = "editor.action.fontZoomOut";
|
||||
when = "";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
361
flake.lock
Normal file
361
flake.lock
Normal file
|
@ -0,0 +1,361 @@
|
|||
{
|
||||
"nodes": {
|
||||
"brew-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1705326576,
|
||||
"narHash": "sha256-9PvMgHgdbpb5vBO8fHCRufodR731ynzGMF9+68vKWck=",
|
||||
"owner": "Homebrew",
|
||||
"repo": "brew",
|
||||
"rev": "1c612baa096c69f2fcb221c74e6f5b9979efdcee",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Homebrew",
|
||||
"ref": "4.2.4",
|
||||
"repo": "brew",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"cask-fonts": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1707957157,
|
||||
"narHash": "sha256-RjcJgrLJ9Zed6XsRTYuq/yXOBm+K5AMGycOWWW8QIUI=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-cask-fonts",
|
||||
"rev": "3c9d137956343e190e0feb319613de9ab50cd8c0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-cask-fonts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"cl-nix-lite": {
|
||||
"locked": {
|
||||
"lastModified": 1698901928,
|
||||
"narHash": "sha256-gMHZybEVA3uMOBu1483gXfvUqpv4Qn7GJs3ZfCQYxpc=",
|
||||
"owner": "hraban",
|
||||
"repo": "cl-nix-lite",
|
||||
"rev": "9ad861b45bda7f59eba5ad1b43565a03c7c58553",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hraban",
|
||||
"repo": "cl-nix-lite",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1707707289,
|
||||
"narHash": "sha256-YuDt/eSTXMEHv8jS8BEZJgqCcG8Tr3cyqaZjJFXZHsw=",
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "44f50a5ecaab72a61d5fd8e5c5717bc4bf9c25dd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lnl7",
|
||||
"ref": "master",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1697816753,
|
||||
"narHash": "sha256-40to80AEIyKCQI0xMKCeF5ePoIKTYgjVVCZeu4CnTxM=",
|
||||
"owner": "hraban",
|
||||
"repo": "flake-compat",
|
||||
"rev": "6025bade1336a36014639bc3f67eacc853dab78f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hraban",
|
||||
"ref": "fixed-output",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694529238,
|
||||
"narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "flake-utils",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1687709756,
|
||||
"narHash": "sha256-Y5wKlQSkgEK2weWdOu4J3riRd+kV/VCgHsqLNTTWQ/0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "dbabf0ca0c0c4bce6ea5eaf65af5cb694d2082c7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1708031129,
|
||||
"narHash": "sha256-EH20hJfNnc1/ODdDVat9B7aKm0B95L3YtkIRwKLvQG8=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "3d6791b3897b526c82920a2ab5f61d71985b3cf8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"homebrew-cask": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1708086358,
|
||||
"narHash": "sha256-h+afCxxV/FdfipQ/HpHhgkvbXgu9UfEgyrmfxr32ogA=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-cask",
|
||||
"rev": "75f6b30c1d7b23c7984a93b53fc86b97df233157",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-cask",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"homebrew-core": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1708085757,
|
||||
"narHash": "sha256-u/rE6MjReC+34dT83BmRRSbtqWubg0hf/gRQoZ2Uh2E=",
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-core",
|
||||
"rev": "a008a7f04d026bb35b9aded0a427c6ee38aa8eb7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "homebrew",
|
||||
"repo": "homebrew-core",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"hyprland-contrib": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"unstable"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706198673,
|
||||
"narHash": "sha256-bHlxFd+3QHy6eXtTzzhwVNcyxBSOxTvBuJGNUzI4C4M=",
|
||||
"owner": "hyprwm",
|
||||
"repo": "contrib",
|
||||
"rev": "16884001b26e6955ff4b88b4dfe4c8986e20f153",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hyprwm",
|
||||
"repo": "contrib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"mac-app-util": {
|
||||
"inputs": {
|
||||
"cl-nix-lite": "cl-nix-lite",
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1707183497,
|
||||
"narHash": "sha256-K6LVwmM32uUEYXpDFCnwNqOyi863FRXR6KFq87X3iHg=",
|
||||
"owner": "hraban",
|
||||
"repo": "mac-app-util",
|
||||
"rev": "95d9c38d6dec0296d73929f63a7de130f435437b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hraban",
|
||||
"repo": "mac-app-util",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1688307440,
|
||||
"narHash": "sha256-7PTjbN+/+b799YN7Tk2SS5Vh8A0L3gBo8hmB7Y0VXug=",
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "b06bab83bdf285ea0ae3c8e145a081eb95959047",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "LnL7",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-homebrew": {
|
||||
"inputs": {
|
||||
"brew-src": "brew-src",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nix-darwin": "nix-darwin",
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705952034,
|
||||
"narHash": "sha256-H0nk8Gk8kPw4yi2WwOTsSHgPrzSwyNgWEYHk10IJwfc=",
|
||||
"owner": "zhaofengli-wip",
|
||||
"repo": "nix-homebrew",
|
||||
"rev": "40f5ee46b58e7c5f1927e2c5a583dc3d7e571ed9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "zhaofengli-wip",
|
||||
"repo": "nix-homebrew",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1698553279,
|
||||
"narHash": "sha256-T/9P8yBSLcqo/v+FTOBK+0rjzjPMctVymZydbvR/Fak=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "90e85bc7c1a6fc0760a94ace129d3a1c61c3d035",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1687274257,
|
||||
"narHash": "sha256-TutzPriQcZ8FghDhEolnHcYU2oHIG5XWF+/SUBNnAOE=",
|
||||
"path": "/nix/store/22qgs3skscd9bmrxv9xv4q5d4wwm5ppx-source",
|
||||
"rev": "2c9ecd1f0400076a4d6b2193ad468ff0a7e7fdc5",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1688049487,
|
||||
"narHash": "sha256-100g4iaKC9MalDjUW9iN6Jl/OocTDtXdeAj7pEGIRh4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "4bc72cae107788bf3f24f30db2e2f685c9298dc9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"cask-fonts": "cask-fonts",
|
||||
"darwin": "darwin",
|
||||
"home-manager": "home-manager",
|
||||
"homebrew-cask": "homebrew-cask",
|
||||
"homebrew-core": "homebrew-core",
|
||||
"hyprland-contrib": "hyprland-contrib",
|
||||
"mac-app-util": "mac-app-util",
|
||||
"nix-homebrew": "nix-homebrew",
|
||||
"unstable": "unstable"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1707956935,
|
||||
"narHash": "sha256-ZL2TrjVsiFNKOYwYQozpbvQSwvtV/3Me7Zwhmdsfyu4=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a4d4fe8c5002202493e87ec8dbc91335ff55552c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
84
flake.nix
Normal file
84
flake.nix
Normal file
|
@ -0,0 +1,84 @@
|
|||
{
|
||||
description = "Master flake for all my setups";
|
||||
|
||||
inputs = {
|
||||
unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
darwin.url = "github:lnl7/nix-darwin/master";
|
||||
darwin.inputs.nixpkgs.follows = "unstable";
|
||||
|
||||
nix-homebrew.url = "github:zhaofengli-wip/nix-homebrew";
|
||||
|
||||
homebrew-core.url = "github:homebrew/homebrew-core";
|
||||
homebrew-core.flake = false;
|
||||
|
||||
homebrew-cask.url = "github:homebrew/homebrew-cask";
|
||||
homebrew-cask.flake = false;
|
||||
|
||||
cask-fonts.url = "github:homebrew/homebrew-cask-fonts";
|
||||
cask-fonts.flake = false;
|
||||
|
||||
home-manager.url = "github:nix-community/home-manager";
|
||||
home-manager.inputs.nixpkgs.follows = "unstable";
|
||||
|
||||
hyprland-contrib.url = "github:hyprwm/contrib";
|
||||
hyprland-contrib.inputs.nixpkgs.follows = "unstable";
|
||||
|
||||
# fix for app links on macos
|
||||
mac-app-util.url = "github:hraban/mac-app-util";
|
||||
};
|
||||
|
||||
outputs = { unstable, home-manager, darwin, hyprland-contrib, nix-homebrew, homebrew-core, homebrew-cask, cask-fonts, ...}@inputs: {
|
||||
nixosConfigurations = {
|
||||
gunther = unstable.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
./gunther/configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.leonv = import ./gunther/leonv.nix;
|
||||
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||
}
|
||||
];
|
||||
};
|
||||
iso = unstable.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
"${unstable}/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"
|
||||
./iso/configuration.nix
|
||||
];
|
||||
};
|
||||
willem = unstable.lib.nixosSystem {
|
||||
system = "aarch64-linux";
|
||||
modules = [ ./willem/configuration.nix ];
|
||||
};
|
||||
};
|
||||
darwinConfigurations = {
|
||||
shinx = darwin.lib.darwinSystem {
|
||||
system = "aarch64-darwin";
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
./shinx/default.nix
|
||||
home-manager.darwinModules.home-manager
|
||||
nix-homebrew.darwinModules.nix-homebrew
|
||||
{
|
||||
nix-homebrew = {
|
||||
enable = true;
|
||||
enableRosetta = true;
|
||||
user = "leonvatthauer";
|
||||
taps = {
|
||||
"homebrew/homebrew-core" = homebrew-core;
|
||||
"homebrew/homebrew-cask" = homebrew-cask;
|
||||
"homebrew/homebrew-cask-fonts" = cask-fonts;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
248
gunther/configuration.nix
Executable file
248
gunther/configuration.nix
Executable file
|
@ -0,0 +1,248 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# VM
|
||||
virtualisation.vmVariant = {
|
||||
# following configuration is added only when building VM with build-vm
|
||||
virtualisation = {
|
||||
memorySize = 2048; # Use 2048MiB memory.
|
||||
cores = 3;
|
||||
};
|
||||
};
|
||||
|
||||
# optimize storage
|
||||
nix.optimise.automatic = true;
|
||||
|
||||
# Bootloader.
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
boot.loader.efi.efiSysMountPoint = "/boot";
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
|
||||
networking.hostName = "gunther";
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Berlin";
|
||||
|
||||
i18n.supportedLocales = [
|
||||
"en_US.UTF-8/UTF-8"
|
||||
"de_DE.UTF-8/UTF-8"
|
||||
];
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
i18n.extraLocaleSettings = {
|
||||
LANG = "en_US.UTF-8";
|
||||
LC_ALL = "en_US.UTF-8";
|
||||
LANGUAGE = "en_US.UTF-8";
|
||||
LC_ADDRESS = "de_DE.UTF-8";
|
||||
LC_IDENTIFICATION = "de_DE.UTF-8";
|
||||
LC_MEASUREMENT = "de_DE.UTF-8";
|
||||
LC_MONETARY = "de_DE.UTF-8";
|
||||
LC_NAME = "de_DE.UTF-8";
|
||||
LC_NUMERIC = "de_DE.UTF-8";
|
||||
LC_PAPER = "de_DE.UTF-8";
|
||||
LC_TELEPHONE = "de_DE.UTF-8";
|
||||
LC_TIME = "de_DE.UTF-8";
|
||||
};
|
||||
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
package = pkgs.greetd.gtkgreet;
|
||||
settings = {
|
||||
default_session = {
|
||||
command = "Hyprland --config /etc/greetd/hyprland.conf";
|
||||
user = "greeter";
|
||||
};
|
||||
};
|
||||
};
|
||||
environment.etc."greetd/environments".text = ''
|
||||
Hyprland
|
||||
'';
|
||||
environment.etc."greetd/hyprland.conf".text = ''
|
||||
monitor = DP-3,2560x1440@144,1920x0,1
|
||||
monitor = HDMI-A-5,1920x1080@75,0x0,1
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
}
|
||||
|
||||
exec-once = gtkgreet -l -b /etc/greetd/wallpaper.jpg -s /etc/greetd/style.css; hyprctl dispatch exit
|
||||
'';
|
||||
environment.etc."greetd/wallpaper.jpg".source = ./hypr/wallpaper.jpg;
|
||||
environment.etc."greetd/style.css".text = ''
|
||||
window {
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
background-color: black;
|
||||
}
|
||||
'';
|
||||
|
||||
# Configure console keymap
|
||||
console.keyMap = "us";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
services.printing = {
|
||||
enable = true;
|
||||
drivers = [ pkgs.splix ];
|
||||
};
|
||||
|
||||
# bluetooth
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.bluetooth.powerOnBoot = true;
|
||||
services.blueman.enable = true;
|
||||
|
||||
# Enable sound with pipewire.
|
||||
sound.enable = true;
|
||||
hardware.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
# Define a user account.
|
||||
users.users.leonv = {
|
||||
isNormalUser = true;
|
||||
description = "Leon Vatthauer";
|
||||
extraGroups = [ "networkmanager" "wheel" ];
|
||||
initialPassword = "leonv"; # just for setup
|
||||
};
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# List packages installed in system profile.
|
||||
environment.systemPackages =
|
||||
with pkgs;
|
||||
let
|
||||
catp-gtk = pkgs.catppuccin-gtk.override {
|
||||
accents = [ "flamingo" ]; # You can specify multiple accents here to output multiple themes
|
||||
size = "compact";
|
||||
tweaks = [ "rimless" "black" ]; # You can also specify multiple tweaks here
|
||||
variant = "macchiato";
|
||||
};
|
||||
in [
|
||||
# for connecting to nas
|
||||
nfs-utils
|
||||
|
||||
# some standards for convenience
|
||||
vim
|
||||
parted
|
||||
os-prober
|
||||
qpdfview
|
||||
swww
|
||||
|
||||
# greeter
|
||||
greetd.gtkgreet
|
||||
catp-gtk
|
||||
|
||||
# deps for hyprland / eww
|
||||
socat
|
||||
];
|
||||
|
||||
system.stateVersion = "23.11";
|
||||
|
||||
# NFS setup
|
||||
services.rpcbind.enable = true; # needed for NFS
|
||||
systemd.mounts = [{
|
||||
type = "nfs";
|
||||
mountConfig = {
|
||||
Options = "noatime";
|
||||
};
|
||||
what = "192.168.178.20:/volume1/MiniDrive";
|
||||
where = "/MiniDrive";
|
||||
}];
|
||||
|
||||
systemd.automounts = [{
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
automountConfig = {
|
||||
TimeoutIdleSec = "10";
|
||||
};
|
||||
where = "/MiniDrive";
|
||||
}];
|
||||
|
||||
# source zsh
|
||||
programs.zsh.enable = true;
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
|
||||
# Binary Cache for Haskell.nix
|
||||
nix.settings.trusted-public-keys = [
|
||||
"hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
|
||||
];
|
||||
nix.settings.substituters = [
|
||||
"https://aseipp-nix-cache.global.ssl.fastly.net"
|
||||
"https://cache.iog.io"
|
||||
];
|
||||
|
||||
# environment variables
|
||||
environment.sessionVariables = {
|
||||
## disable logging when direnv changes
|
||||
DIRENV_LOG_FORMAT = [];
|
||||
# GTK theme (set here for greetd)
|
||||
GTK_THEME = "Catppuccin-Macchiato-Compact-Flamingo-Dark";
|
||||
};
|
||||
|
||||
# fonts
|
||||
fonts = {
|
||||
packages = with pkgs; [
|
||||
((nerdfonts.override { fonts = [ "Hack" "DejaVuSansMono" "DroidSansMono" "Noto" ]; }))
|
||||
mononoki
|
||||
# noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-emoji
|
||||
];
|
||||
enableDefaultPackages = true;
|
||||
fontconfig = {
|
||||
defaultFonts = {
|
||||
monospace = [ "Berkeley Mono Nerd Font" ];
|
||||
sansSerif = [ "NotoSans Nerd Font" ];
|
||||
serif = [ "NotoSans Nerd Font" ];
|
||||
emoji = [ "Noto Color Emoji" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# enable flakes
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
|
||||
# hyprland
|
||||
programs.hyprland.enable = true;
|
||||
|
||||
# ssh
|
||||
programs.ssh.startAgent = true;
|
||||
programs.ssh.extraConfig = ''
|
||||
AddKeysToAgent yes
|
||||
IdentityFile ~/.ssh/git
|
||||
'';
|
||||
|
||||
programs.steam.enable = true;
|
||||
|
||||
# thunar
|
||||
programs.thunar = {
|
||||
enable = true;
|
||||
plugins = with pkgs.xfce; [
|
||||
thunar-archive-plugin
|
||||
thunar-volman
|
||||
];
|
||||
};
|
||||
services.gvfs.enable = true; # Mount, trash, and others
|
||||
services.tumbler.enable = true; # thumbnail support for images
|
||||
}
|
34
gunther/hardware-configuration.nix
Normal file
34
gunther/hardware-configuration.nix
Normal file
|
@ -0,0 +1,34 @@
|
|||
# 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 = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/2191540a-8cf9-400e-b4bc-9dbf71527b07";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/3DD6-C061";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
swapDevices =
|
||||
[ { device = "/dev/disk/by-uuid/7c6d727e-1d40-472a-a409-205db0776d20"; }
|
||||
];
|
||||
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
111
gunther/hypr/catppuccin-macchiato.rasi
Normal file
111
gunther/hypr/catppuccin-macchiato.rasi
Normal file
|
@ -0,0 +1,111 @@
|
|||
* {
|
||||
bg-col: #24273a;
|
||||
bg-col-light: #24273a;
|
||||
border-col: #24273a;
|
||||
selected-col: #24273a;
|
||||
blue: #8aadf4;
|
||||
fg-col: #cad3f5;
|
||||
fg-col2: #ed8796;
|
||||
grey: #6e738d;
|
||||
|
||||
width: 600;
|
||||
font: "JetBrainsMono Nerd Font 14";
|
||||
}
|
||||
|
||||
element-text, element-icon , mode-switcher {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
|
||||
window {
|
||||
height: 360px;
|
||||
border: 3px;
|
||||
border-color: @border-col;
|
||||
background-color: @bg-col;
|
||||
}
|
||||
|
||||
mainbox {
|
||||
background-color: @bg-col;
|
||||
}
|
||||
|
||||
inputbar {
|
||||
children: [prompt,entry];
|
||||
background-color: @bg-col;
|
||||
border-radius: 5px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
prompt {
|
||||
background-color: @blue;
|
||||
padding: 6px;
|
||||
text-color: @bg-col;
|
||||
border-radius: 3px;
|
||||
margin: 20px 0px 0px 20px;
|
||||
}
|
||||
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: ":";
|
||||
}
|
||||
|
||||
entry {
|
||||
padding: 6px;
|
||||
margin: 20px 0px 0px 10px;
|
||||
text-color: @fg-col;
|
||||
background-color: @bg-col;
|
||||
}
|
||||
|
||||
listview {
|
||||
border: 0px 0px 0px;
|
||||
padding: 6px 0px 0px;
|
||||
margin: 10px 0px 0px 20px;
|
||||
columns: 2;
|
||||
lines: 5;
|
||||
background-color: @bg-col;
|
||||
}
|
||||
|
||||
element {
|
||||
padding: 5px;
|
||||
background-color: @bg-col;
|
||||
text-color: @fg-col ;
|
||||
}
|
||||
|
||||
element-icon {
|
||||
size: 25px;
|
||||
}
|
||||
|
||||
element selected {
|
||||
background-color: @selected-col ;
|
||||
text-color: @fg-col2 ;
|
||||
}
|
||||
|
||||
mode-switcher {
|
||||
spacing: 0;
|
||||
}
|
||||
|
||||
button {
|
||||
padding: 10px;
|
||||
background-color: @bg-col-light;
|
||||
text-color: @grey;
|
||||
vertical-align: 0.5;
|
||||
horizontal-align: 0.5;
|
||||
}
|
||||
|
||||
button selected {
|
||||
background-color: @bg-col;
|
||||
text-color: @blue;
|
||||
}
|
||||
|
||||
message {
|
||||
background-color: @bg-col-light;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
textbox {
|
||||
padding: 6px;
|
||||
margin: 20px 0px 0px 20px;
|
||||
text-color: @blue;
|
||||
background-color: @bg-col-light;
|
||||
}
|
181
gunther/hypr/hyprland.nix
Normal file
181
gunther/hypr/hyprland.nix
Normal file
|
@ -0,0 +1,181 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
# hyprland setup
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
xwayland.enable = true;
|
||||
settings = {
|
||||
monitor = [
|
||||
"DP-3 , 2560x1440@144, 1920x0, 1"
|
||||
"HDMI-A-5, 1920x1080@75 , 0x0 , 1"
|
||||
];
|
||||
input = {
|
||||
kb_layout = "de";
|
||||
kb_variant = "us";
|
||||
follow_mouse = 1;
|
||||
};
|
||||
"$mod" = "SUPER";
|
||||
"$modd" = "SUPER_SHIFT";
|
||||
general = {
|
||||
gaps_in = 8;
|
||||
gaps_out = 15;
|
||||
border_size = 3;
|
||||
|
||||
resize_on_border = true;
|
||||
layout = "dwindle";
|
||||
|
||||
"col.active_border" = "rgba(cba6f7ff) rgba(89b4faff) rgba(94e2d5ff) 10deg";
|
||||
"col.inactive_border" = "0xff45475a";
|
||||
"col.nogroup_border" = "0xff89dceb";
|
||||
"col.nogroup_border_active" = "0xfff9e2af";
|
||||
};
|
||||
decoration = {
|
||||
blur = {
|
||||
new_optimizations = true;
|
||||
size = 1;
|
||||
passes = 1;
|
||||
};
|
||||
drop_shadow = true;
|
||||
shadow_range = 100;
|
||||
shadow_render_power = 5;
|
||||
"col.shadow" = "0x33000000";
|
||||
"col.shadow_inactive" = "0x22000000";
|
||||
rounding = 15;
|
||||
};
|
||||
animations = {
|
||||
enabled = 1;
|
||||
bezier = "overshot,0.13,0.99,0.29,1.1";
|
||||
animation = [
|
||||
"windows,1,4,overshot,slide"
|
||||
"border,1,10,default"
|
||||
"fade,1,10,default"
|
||||
"workspaces,1,6,overshot,slidevert"
|
||||
];
|
||||
};
|
||||
misc = {
|
||||
disable_hyprland_logo = true;
|
||||
};
|
||||
bind = [
|
||||
# opening programs
|
||||
"$mod, Return, exec, foot"
|
||||
"$mod, D, exec, rofi -show drun -show-icons"
|
||||
"$mod, M, exit, "
|
||||
"$mod, Q, killactive, "
|
||||
|
||||
# moving around
|
||||
"$mod, left , movefocus, l"
|
||||
"$mod, right, movefocus, r"
|
||||
"$mod, down , movefocus, d"
|
||||
"$mod, up , movefocus, u"
|
||||
|
||||
# moving windows
|
||||
"$modd, left , movewindow, l"
|
||||
"$modd, right, movewindow, r"
|
||||
"$modd, down , movewindow, d"
|
||||
"$modd, up , movewindow, u"
|
||||
|
||||
# workspaces
|
||||
"$mod, 1, workspace, 1"
|
||||
"$mod, 2, workspace, 2"
|
||||
"$mod, 3, workspace, 3"
|
||||
"$mod, 4, workspace, 4"
|
||||
"$modd, 1, movetoworkspacesilent, 1"
|
||||
"$modd, 2, movetoworkspacesilent, 2"
|
||||
"$modd, 3, movetoworkspacesilent, 3"
|
||||
"$modd, 4, movetoworkspacesilent, 4"
|
||||
|
||||
# fullscreen
|
||||
"$mod, F11, fullscreen, 0"
|
||||
"$mod, m, fullscreen, 1" # maximize
|
||||
|
||||
# floating
|
||||
"$mod, F, togglefloating, active"
|
||||
|
||||
# screenshot
|
||||
", Print, exec, grimblast copysave area $HOME\"/screenshots/\"$(date +'%F-%T.png');"
|
||||
|
||||
|
||||
];
|
||||
bindm = [
|
||||
"$mod, mouse:272, movewindow"
|
||||
];
|
||||
bindle = [
|
||||
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"
|
||||
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%-"
|
||||
", XF86AudioMute, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 0%"
|
||||
];
|
||||
exec-once = [
|
||||
"bash ~/Git/nixos/gunther/hypr/start.sh"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# tell electron to use wayland
|
||||
home.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
|
||||
# terminal
|
||||
programs.foot = {
|
||||
enable = true;
|
||||
settings = {
|
||||
main = {
|
||||
font = "monospace:size=12";
|
||||
dpi-aware = "yes";
|
||||
};
|
||||
colors = {
|
||||
foreground = "cad3f5";
|
||||
background = "24273a";
|
||||
regular0 = "494d64";
|
||||
regular1 = "ed8796";
|
||||
regular3 = "eed49f";
|
||||
regular4 = "8aadf4";
|
||||
regular5 = "f5bde6";
|
||||
regular6 = "8bd5ca";
|
||||
regular7 = "b8c0e0";
|
||||
bright0 = "5b6078";
|
||||
bright1 = "ed8796";
|
||||
bright3 = "eed49f";
|
||||
bright4 = "8aadf4";
|
||||
bright5 = "f5bde6";
|
||||
bright6 = "8bd5ca";
|
||||
bright7 = "a5adcb";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
programs.rofi = {
|
||||
enable = true;
|
||||
package = pkgs.rofi-wayland;
|
||||
theme = ./catppuccin-macchiato.rasi;
|
||||
font = "monospace 14";
|
||||
terminal = "foot";
|
||||
extraConfig = {
|
||||
modi = "drun,run,top";
|
||||
};
|
||||
plugins = [
|
||||
pkgs.rofi-top
|
||||
];
|
||||
};
|
||||
|
||||
services.mako = {
|
||||
enable = true;
|
||||
extraConfig = ''
|
||||
background-color=#24273a
|
||||
text-color=#cad3f5
|
||||
border-color=#8aadf4
|
||||
progress-color=over #363a4f
|
||||
sort=-time
|
||||
layer=overlay
|
||||
width=300
|
||||
height=110
|
||||
border-size=2
|
||||
border-radius=15
|
||||
max-icon-size=64
|
||||
default-timeout=5000
|
||||
ignore-timeout=1
|
||||
|
||||
[urgency=high]
|
||||
border-color=#f5a97f
|
||||
'';
|
||||
};
|
||||
|
||||
}
|
5
gunther/hypr/hyprpaper.conf
Normal file
5
gunther/hypr/hyprpaper.conf
Normal file
|
@ -0,0 +1,5 @@
|
|||
preload = ~/Git/nixos/gunther/hypr/wallpaper.jpg
|
||||
#
|
||||
#set the default wallpaper(s) seen on inital workspace(s) --depending on the number of monitors used
|
||||
wallpaper = monitor1,~/Git/nixos/gunther/hypr/wallpaper.jpg
|
||||
wallpaper = monitor2,~/Git/nixos/gunther/hypr/wallpaper.jpg
|
13
gunther/hypr/start.sh
Executable file
13
gunther/hypr/start.sh
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# init nmapplet
|
||||
# TODO add back once eww supports tray
|
||||
# nm-applet --indicator &
|
||||
swww init
|
||||
swww img /home/leonv/Git/nixos/gunther/hypr/wallpaper.jpg
|
||||
|
||||
eww daemon
|
||||
eww open top-bar
|
||||
|
||||
# notification
|
||||
mako
|
BIN
gunther/hypr/wallpaper.jpg
Normal file
BIN
gunther/hypr/wallpaper.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 84 KiB |
137
gunther/leonv.nix
Executable file
137
gunther/leonv.nix
Executable file
|
@ -0,0 +1,137 @@
|
|||
{ config, pkgs, inputs, ... }:
|
||||
{
|
||||
imports = [
|
||||
./../common
|
||||
./hypr/hyprland.nix
|
||||
./../common/eww
|
||||
];
|
||||
/* The home.stateVersion option does not have a default and must be set */
|
||||
home.stateVersion = "23.11";
|
||||
home.username = "leonv";
|
||||
home.homeDirectory = "/home/leonv";
|
||||
|
||||
home.packages = with pkgs; [
|
||||
# theme for gtk applications
|
||||
orchis-theme
|
||||
|
||||
# stuff
|
||||
jq
|
||||
vlc
|
||||
openvpn
|
||||
signal-desktop
|
||||
webcord
|
||||
firefox-wayland
|
||||
ungoogled-chromium
|
||||
thunderbird
|
||||
gimp
|
||||
qpdfview
|
||||
wget
|
||||
fontforge
|
||||
gparted
|
||||
eza
|
||||
ripgrep
|
||||
fd
|
||||
zoom-us
|
||||
|
||||
# development
|
||||
jetbrains.idea-ultimate
|
||||
gnumake
|
||||
texlive.combined.scheme-full
|
||||
ltex-ls
|
||||
ghostscript
|
||||
jdk11
|
||||
coq
|
||||
gcc
|
||||
ghc
|
||||
cabal-install
|
||||
haskell-language-server
|
||||
python3
|
||||
python3Packages.pygments
|
||||
nodejs_20
|
||||
unifont
|
||||
anki
|
||||
pandoc
|
||||
|
||||
# games
|
||||
prismlauncher
|
||||
|
||||
# hyprland
|
||||
kitty
|
||||
networkmanagerapplet
|
||||
mako
|
||||
libnotify
|
||||
pavucontrol
|
||||
hyprpaper
|
||||
qimgv
|
||||
playerctl
|
||||
hyprpicker
|
||||
wev
|
||||
inputs.hyprland-contrib.packages.${pkgs.system}.grimblast
|
||||
bluez
|
||||
htop
|
||||
archiver
|
||||
gnome.file-roller
|
||||
discord
|
||||
zip
|
||||
emacs
|
||||
shellcheck
|
||||
|
||||
# yubikey
|
||||
yubico-pam
|
||||
yubikey-manager
|
||||
|
||||
# agda
|
||||
|
||||
(agda.withPackages [
|
||||
agdaPackages.standard-library
|
||||
agdaPackages.agda-categories
|
||||
])
|
||||
];
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
shellAliases = {
|
||||
clean = "sudo nix-env --delete-generations old --profile /nix/var/nix/profiles/system && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration switch && sudo nix-store --gc";
|
||||
ls = "eza";
|
||||
ll = "eza -l";
|
||||
l = "eza -lah";
|
||||
};
|
||||
initExtra = ''
|
||||
function rebuild () {
|
||||
sudo nixos-rebuild switch --flake /home/leonv/Git/nixos
|
||||
sudo cp -r /home/leonv/Git/nixos /etc/
|
||||
}
|
||||
'';
|
||||
oh-my-zsh.enable = true;
|
||||
};
|
||||
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
name = "Catppuccin-Macchiato-Compact-Flamingo-Dark";
|
||||
package = pkgs.catppuccin-gtk.override {
|
||||
accents = [ "flamingo" ];
|
||||
size = "compact";
|
||||
tweaks = [ "rimless" "black" ];
|
||||
variant = "macchiato";
|
||||
};
|
||||
};
|
||||
iconTheme = {
|
||||
name = "Dracula";
|
||||
package = pkgs.dracula-icon-theme;
|
||||
};
|
||||
font = {
|
||||
name = "NotoSans Nerd Font";
|
||||
};
|
||||
};
|
||||
home.sessionVariables.GTK_THEME = "Catppuccin-Macchiato-Compact-Flamingo-Dark";
|
||||
home.sessionPath = [ "$HOME/.config/emacs/bin" ];
|
||||
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
services.mpris-proxy.enable = true;
|
||||
}
|
105
iso/configuration.nix
Normal file
105
iso/configuration.nix
Normal file
|
@ -0,0 +1,105 @@
|
|||
|
||||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.leonv = {
|
||||
isNormalUser = true;
|
||||
description = "Leon Vatthauer";
|
||||
extraGroups = [ "networkmanager" "wheel" ];
|
||||
initialPassword = "leonv";
|
||||
};
|
||||
|
||||
networking.hostName = "gunther"; # Define your hostname.
|
||||
# Enable networking
|
||||
networking.networkmanager = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Berlin";
|
||||
|
||||
i18n.supportedLocales = [
|
||||
"en_US.UTF-8/UTF-8"
|
||||
"de_DE.UTF-8/UTF-8"
|
||||
];
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
i18n.extraLocaleSettings = {
|
||||
LANG = "en_US.UTF-8";
|
||||
LC_ALL = "en_US.UTF-8";
|
||||
LANGUAGE = "en_US.UTF-8";
|
||||
LC_ADDRESS = "de_DE.UTF-8";
|
||||
LC_IDENTIFICATION = "de_DE.UTF-8";
|
||||
LC_MEASUREMENT = "de_DE.UTF-8";
|
||||
LC_MONETARY = "de_DE.UTF-8";
|
||||
LC_NAME = "de_DE.UTF-8";
|
||||
LC_NUMERIC = "de_DE.UTF-8";
|
||||
LC_PAPER = "de_DE.UTF-8";
|
||||
LC_TELEPHONE = "de_DE.UTF-8";
|
||||
LC_TIME = "de_DE.UTF-8";
|
||||
};
|
||||
|
||||
# Enable sound with pipewire.
|
||||
sound.enable = true;
|
||||
hardware.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# List packages installed in system profile.
|
||||
environment.systemPackages = with pkgs; [
|
||||
# for connecting to nas
|
||||
nfs-utils
|
||||
|
||||
# some standards for convenience
|
||||
vim
|
||||
parted
|
||||
git
|
||||
];
|
||||
|
||||
system.stateVersion = "23.11"; # Did you read the comment?
|
||||
|
||||
# NFS setup
|
||||
services.rpcbind.enable = true; # needed for NFS
|
||||
systemd.mounts = [{
|
||||
type = "nfs";
|
||||
mountConfig = {
|
||||
Options = "noatime";
|
||||
};
|
||||
what = "192.168.178.20:/volume1/MiniDrive";
|
||||
where = "/MiniDrive";
|
||||
}];
|
||||
|
||||
systemd.automounts = [{
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
automountConfig = {
|
||||
TimeoutIdleSec = "10";
|
||||
};
|
||||
where = "/MiniDrive";
|
||||
}];
|
||||
|
||||
# source zsh
|
||||
programs.zsh.enable = true;
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
|
||||
# Binary Cache for Haskell.nix
|
||||
nix.settings.trusted-public-keys = [
|
||||
"hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ="
|
||||
];
|
||||
nix.settings.substituters = [
|
||||
"https://aseipp-nix-cache.global.ssl.fastly.net"
|
||||
"https://cache.iog.io"
|
||||
];
|
||||
|
||||
# flakes
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
}
|
27
shinx/default.nix
Executable file
27
shinx/default.nix
Executable file
|
@ -0,0 +1,27 @@
|
|||
# hosts/YourHostName/default.nix
|
||||
{ pkgs, home-manager, inputs, ... }@mod-inputs:
|
||||
{
|
||||
|
||||
# Make sure the nix daemon always runs
|
||||
services.nix-daemon.enable = true;
|
||||
# Installs a version of nix, that dosen't need "experimental-features = nix-command flakes" in /etc/nix/nix.conf
|
||||
#services.nix-daemon.package = pkgs.nixFlakes;
|
||||
|
||||
# if you use zsh (the default on new macOS installations),
|
||||
# you'll need to enable this so nix-darwin creates a zshrc sourcing needed environment changes
|
||||
programs.zsh.enable = true;
|
||||
# bash is enabled by default
|
||||
home-manager = {
|
||||
extraSpecialArgs = { inherit (mod-inputs) inputs; };
|
||||
useGlobalPkgs = true;
|
||||
useUserPackages = true;
|
||||
users.leonvatthauer = import ./leonvatthauer.nix;
|
||||
};
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
users.users.leonvatthauer = {
|
||||
home="/Users/leonvatthauer";
|
||||
};
|
||||
fonts.fonts = [
|
||||
pkgs.mononoki
|
||||
];
|
||||
}
|
70
shinx/leonvatthauer.nix
Executable file
70
shinx/leonvatthauer.nix
Executable file
|
@ -0,0 +1,70 @@
|
|||
{ pkgs, lib, config, inputs, ... }:
|
||||
{
|
||||
home.stateVersion = "23.11";
|
||||
imports = [
|
||||
./../common/default.nix
|
||||
];
|
||||
|
||||
home.activation = {
|
||||
trampolineApps = let
|
||||
mac-app-util = inputs.mac-app-util.packages.${pkgs.stdenv.system}.default;
|
||||
in lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||
fromDir="$HOME/Applications/Home Manager Apps"
|
||||
toDir="$HOME/Applications/Home Manager Trampolines"
|
||||
${mac-app-util}/bin/mac-app-util sync-trampolines "$fromDir" "$toDir"
|
||||
'';
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
zsh
|
||||
oh-my-zsh
|
||||
coq
|
||||
openvpn
|
||||
ghc
|
||||
haskell-language-server
|
||||
cabal-install
|
||||
haskellPackages.alex
|
||||
haskellPackages.happy
|
||||
python3
|
||||
python3Packages.pygments
|
||||
nodejs_20
|
||||
iterm2
|
||||
(agda.withPackages [
|
||||
agdaPackages.standard-library
|
||||
agdaPackages.agda-categories
|
||||
])
|
||||
texlive.combined.scheme-full
|
||||
pandoc
|
||||
gh
|
||||
#yubico-pam
|
||||
#yubikey-manager
|
||||
# programs for emacs
|
||||
emacs
|
||||
fd
|
||||
ripgrep
|
||||
gnugrep
|
||||
nixfmt
|
||||
shellcheck
|
||||
fontconfig
|
||||
coreutils
|
||||
coreutils-prefixed
|
||||
];
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
font.name = "Berkeley Mono";
|
||||
|
||||
};
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
oh-my-zsh = {
|
||||
enable = true;
|
||||
plugins = [ "git" ];
|
||||
theme = "robbyrussell";
|
||||
};
|
||||
initExtra = ''
|
||||
export PATH="/opt/homebrew/bin:$PATH"
|
||||
'';
|
||||
};
|
||||
}
|
20
willem/README.md
Normal file
20
willem/README.md
Normal file
|
@ -0,0 +1,20 @@
|
|||
# Willem
|
||||
|
||||
Willem is a server running on a Raspberry Pi 400 offering the following services:
|
||||
- [Gitea](git.vatthauer.xyz)
|
||||
- [Vaultwarden](bitwarden.vatthauer.xyz)
|
||||
|
||||
There are daily backups of the Gitea instance using Restic via B2.
|
||||
## Installation on Raspberry Pi 400
|
||||
### Resources
|
||||
- https://nixos.wiki/wiki/NixOS_on_ARM/Raspberry_Pi_4
|
||||
- https://nixos.wiki/wiki/NixOS_on_ARM#Installation
|
||||
|
||||
### Step by step
|
||||
1. Follow the [generic installation steps](https://nixos.wiki/wiki/NixOS_on_ARM#Installation) to get NixOS up and running on the Pi.
|
||||
2. Generate the default `configuration.nix` via `sudo nixos-generate-config` and do a first rebuild `sudo nixos-rebuild switch`
|
||||
3. Somehow get this repository onto the machine and `cd` into it
|
||||
4. We need git: `nix-shell -p git`
|
||||
5. Build the flake via `sudo nixos-rebuild switch --flake .`
|
||||
6. At this point you can restart
|
||||
7. Login, set password, move the repository to `/home/leonv/nixos`
|
77
willem/configuration.nix
Normal file
77
willem/configuration.nix
Normal file
|
@ -0,0 +1,77 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running 'nixos-help').
|
||||
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
./hardware-configuration.nix
|
||||
./services
|
||||
./programs
|
||||
];
|
||||
|
||||
# enable flakes
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
|
||||
# Use the extlinux boot loader. (NixOS wants to enable GRUB by default)
|
||||
boot.loader.grub.enable = false;
|
||||
# Enables the generation of /boot/extlinux/extlinux.conf
|
||||
boot.loader.generic-extlinux-compatible.enable = true;
|
||||
|
||||
networking.hostName = "willem"; # Define your hostname.
|
||||
#networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
networking.firewall.allowedTCPPorts = [ 22 80 443 631 8096 8920 ];
|
||||
networking.firewall.allowedUDPPorts = [ 22 80 443 631 1900 7359 ];
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Berlin";
|
||||
|
||||
# Define a user account. Don't forget to set a password with 'passwd'.
|
||||
users.users.leonv = {
|
||||
isNormalUser = true;
|
||||
initialPassword = "leonv";
|
||||
extraGroups = [ "wheel" ]; # Enable 'sudo' for the user.
|
||||
packages = with pkgs; [
|
||||
];
|
||||
};
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
|
||||
# List packages installed in system profile.
|
||||
environment.systemPackages = with pkgs; [
|
||||
wget
|
||||
git
|
||||
zsh
|
||||
oh-my-zsh
|
||||
restic
|
||||
];
|
||||
environment.variables = {
|
||||
EDITOR = "nvim";
|
||||
|
||||
# bitwarden key
|
||||
YUBICO_CLIENT_ID = "${../nix-secrets/willem/vaultwarden/yubico-id}";
|
||||
YUBICO_SECRET_KEY = "${../nix-secrets/willem/vaultwarden/yubico-secret}";
|
||||
};
|
||||
environment.shells = [ pkgs.zsh ];
|
||||
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
||||
"plexmediaserver"
|
||||
];
|
||||
|
||||
services.plex = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
};
|
||||
|
||||
services.jellyfin.enable = true;
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It's perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
system.stateVersion = "23.11"; # Did you read the comment?
|
||||
}
|
||||
|
26
willem/hardware-configuration.nix
Normal file
26
willem/hardware-configuration.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
# 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 = [ "xhci_pci" "usbhid" "usb_storage" "uas" "pcie-brcmstb" "reset-raspberrypi" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-partuuid/45e5879b-02";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "ondemand";
|
||||
}
|
8
willem/programs/default.nix
Normal file
8
willem/programs/default.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
imports = [
|
||||
./neovim.nix
|
||||
./ssh.nix
|
||||
./starship.nix
|
||||
./zsh.nix
|
||||
];
|
||||
}
|
14
willem/programs/neovim.nix
Normal file
14
willem/programs/neovim.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
configure = {
|
||||
customRC = '''';
|
||||
packages.myVimPackage = with pkgs.vimPlugins; {
|
||||
start = [ vim-nix ];
|
||||
};
|
||||
};
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
};
|
||||
}
|
6
willem/programs/ssh.nix
Normal file
6
willem/programs/ssh.nix
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
programs.ssh.startAgent = true;
|
||||
programs.ssh.extraConfig = ''
|
||||
AddKeysToAgent yes
|
||||
'';
|
||||
}
|
8
willem/programs/starship.nix
Normal file
8
willem/programs/starship.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
gradle.symbol = "🐘";
|
||||
};
|
||||
};
|
||||
}
|
19
willem/programs/zsh.nix
Normal file
19
willem/programs/zsh.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
shellAliases = {
|
||||
clean = "sudo nix-env --delete-generations old --profile /nix/var/nix/profiles/system && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration switch && sudo nix-store --gc";
|
||||
};
|
||||
shellInit = ''
|
||||
function rebuild () {
|
||||
sudo nixos-rebuild switch --flake /home/leonv/nixos
|
||||
sudo cp -r /home/leonv/nixos /etc/
|
||||
}
|
||||
'';
|
||||
ohMyZsh = {
|
||||
enable = true;
|
||||
plugins = [ "git" ];
|
||||
theme = "dpoggi";
|
||||
};
|
||||
};
|
||||
}
|
8
willem/services/acme.nix
Normal file
8
willem/services/acme.nix
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
security.acme.acceptTerms = true;
|
||||
security.acme.certs = {
|
||||
"git.vatthauer.xyz".email = "leonvatthauer@outlook.com";
|
||||
"bitwarden.vatthauer.xyz".email = "leonvatthauer@outlook.com";
|
||||
"video.vatthauer.xyz".email = "leonvatthauer@outlook.com";
|
||||
};
|
||||
}
|
16
willem/services/ddns.nix
Normal file
16
willem/services/ddns.nix
Normal file
|
@ -0,0 +1,16 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
# dynamic dns
|
||||
users.users.ddns = {
|
||||
isSystemUser = true;
|
||||
group = "ddns";
|
||||
};
|
||||
users.groups.ddns = {};
|
||||
systemd.services.ddns-updater = {
|
||||
enable = true;
|
||||
serviceConfig.User = "ddns";
|
||||
path = [ pkgs.curl ];
|
||||
script = "${../../nix-secrets/willem/ddns/update}";
|
||||
startAt = "hourly";
|
||||
};
|
||||
}
|
12
willem/services/default.nix
Normal file
12
willem/services/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
imports = [
|
||||
./acme.nix
|
||||
./ddns.nix
|
||||
./nginx.nix
|
||||
./gitea.nix
|
||||
./printing.nix
|
||||
./restic.nix
|
||||
./ssh.nix
|
||||
./vaultwarden.nix
|
||||
];
|
||||
}
|
23
willem/services/gitea.nix
Normal file
23
willem/services/gitea.nix
Normal file
|
@ -0,0 +1,23 @@
|
|||
{ pkgs, ...}:
|
||||
{
|
||||
services.gitea = {
|
||||
enable = true;
|
||||
appName = "Lambda-Git";
|
||||
package = pkgs.forgejo;
|
||||
stateDir = "/gitea";
|
||||
database = {
|
||||
type = "sqlite3";
|
||||
};
|
||||
dump = {
|
||||
enable = true;
|
||||
interval = "02:00";
|
||||
};
|
||||
settings.server = {
|
||||
ROOT_URL = "https://git.vatthauer.xyz";
|
||||
HTTP_PORT = 3001;
|
||||
DOMAIN = "git.vatthauer.xyz";
|
||||
};
|
||||
settings.session.COOKIE_SECURE = true;
|
||||
settings.service.DISABLE_REGISTRATION = true;
|
||||
};
|
||||
}
|
33
willem/services/nginx.nix
Normal file
33
willem/services/nginx.nix
Normal file
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."git.vatthauer.xyz" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:3001/";
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."bitwarden.vatthauer.xyz" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:8222/";
|
||||
};
|
||||
};
|
||||
|
||||
services.nginx.virtualHosts."video.vatthauer.xyz" = {
|
||||
enableACME = true;
|
||||
forceSSL = false;
|
||||
locations."/" = {
|
||||
proxyPass = "http://localhost:8096";
|
||||
};
|
||||
};
|
||||
}
|
20
willem/services/printing.nix
Normal file
20
willem/services/printing.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
# Enable CUPS to print documents.
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
publish.enable = true;
|
||||
publish.userServices = true;
|
||||
};
|
||||
services.printing = {
|
||||
enable = true;
|
||||
drivers = [ pkgs.splix ];
|
||||
browsing = true;
|
||||
listenAddresses = [ "*:631" ];
|
||||
allowFrom = [ "all" ];
|
||||
defaultShared = true;
|
||||
extraConf = ''
|
||||
BrowseLocalProtocols all
|
||||
'';
|
||||
};
|
||||
}
|
17
willem/services/restic.nix
Normal file
17
willem/services/restic.nix
Normal file
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
services.restic.backups = {
|
||||
giteaBackup = {
|
||||
paths = [ "/gitea/dump" ];
|
||||
# environmentFile = "/home/leonv/nixos/willem/private/gitea_backupCreds";
|
||||
# passwordFile = "/home/leonv/nixos/willem/private/restic-password";
|
||||
environmentFile = "${../../nix-secrets/willem/gitea/backupCreds}";
|
||||
passwordFile = "${../../nix-secrets/willem/restic/password}";
|
||||
repository = "b2:gitea-willem";
|
||||
initialize = true;
|
||||
timerConfig = {
|
||||
OnCalendar = "04:00";
|
||||
Persistent = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
4
willem/services/ssh.nix
Normal file
4
willem/services/ssh.nix
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
# Enable the OpenSSH daemon.
|
||||
services.openssh.enable = true;
|
||||
}
|
19
willem/services/vaultwarden.nix
Normal file
19
willem/services/vaultwarden.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
services.vaultwarden = {
|
||||
enable = true;
|
||||
config = {
|
||||
DOMAIN = "https://bitwarden.vatthauer.xyz";
|
||||
SIGNUPS_ALLOWED = false;
|
||||
|
||||
ROCKET_ADDRESS = "127.0.0.1";
|
||||
ROCKET_PORT = 8222;
|
||||
|
||||
ROCKET_LOG = "critical";
|
||||
|
||||
ADMIN_TOKEN = "${../../nix-secrets/willem/vaultwarden/admin-token}";
|
||||
|
||||
YUBICO_CLIENT_ID = "${../../nix-secrets/willem/vaultwarden/yubico-id}";
|
||||
YUBICO_SECRET_KEY = "${../../nix-secrets/willem/vaultwarden/yubico-secret}";
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue