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