This commit is contained in:
foosinn 2020-06-11 19:13:58 +02:00
commit 8c98e8bd14
10 changed files with 633 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/result
/roles/wireless.nix

40
configuration.nix Normal file
View file

@ -0,0 +1,40 @@
# 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, ... }:
{
imports =
[
<nixos-hardware/lenovo/thinkpad/x220>
<home-manager/nixos>
# Include the results of the hardware scan.
./hardware-configuration.nix
./roles/dev.nix
./roles/base.nix
./roles/desktop.nix
./roles/wireless.nix
];
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "raven";
networking.hostId = "e3a397c5";
networking.useDHCP = false;
networking.interfaces.enp0s25.useDHCP = true;
networking.interfaces.wlp3s0.useDHCP = true;
i18n.defaultLocale = "en_US.UTF-8";
time.timeZone = "Europe/Berlin";
services.openssh.enable = true;
networking.firewall.enable = true;
system.stateVersion = "20.03"; # We can stay here
}

132
dotfiles/sway/config Normal file
View file

@ -0,0 +1,132 @@
# config
set $mod Mod1
set $left h
set $down j
set $up k
set $right l
set $term alacritty
set $menu bemenu-run
output * bg /home/stefan/Sync/wall/nasa-yZygONrUBe8-unsplash.jpg fill
output eDP-1 scale 1.3
output DP-1 res 5120x1440
# user keybinds
bindsym $mod+Return exec $term
bindsym $mod+Shift+q kill
bindsym $mod+d exec $menu
floating_modifier $mod normal
bindsym $mod+Shift+c reload
bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'
bindsym $mod+Shift+p exec keepassxc
bindsym $mod+z exec swaylock -t
bindsym $mod+Up exec light -A 5
bindsym $mod+Down exec light -U 5
bindsym Print exec grim -g "$(slurp)" - | wl-copy -t image/png
# app rules
for_window [app_id="org.keepassxc.KeePassXC"] floating enable
# font
font Cascadia Code 10
# colors
set $black #2d2a2e
set $base00 #2d2a2e
set $base01 #cc6666
set $base02 #a9dc76
set $base03 #ffd866
set $base04 #78dce8
set $base05 #55dbbe
set $base06 #ff6181
set $base07 #eeeeee
set $base08 #323232
set $base09 #cc6666
set $base0A #ffd866
set $base0B #78dce8
set $base0C #55dbbe
set $base0D #ff6181
set $base0E #a6dc76
set $base0F #ffffff
# border background text indicator
client.focused $base04 $base00 $base07 $base04 $base04
client.focused_inactive $base00 $base00 $base07 $base00 $base00
client.unfocused $black $black $base07 $base00 $base00
client.urgent $base01 $base01 $base00 $base08 $base07
# movement
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
bindsym $mod+Shift+$left move left
bindsym $mod+Shift+$down move down
bindsym $mod+Shift+$up move up
bindsym $mod+Shift+$right move right
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 10
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 10
bindsym $mod+b splith
bindsym $mod+v splitv
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
bindsym $mod+f fullscreen
bindsym $mod+Shift+space floating toggle
bindsym $mod+space focus mode_toggle
bindsym $mod+a focus parent
bindsym $mod+Shift+minus move scratchpad
bindsym $mod+minus scratchpad show
mode "resize" {
bindsym $left resize shrink width 10px
bindsym $down resize grow height 10px
bindsym $up resize shrink height 10px
bindsym $right resize grow width 10px
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
bar {
position bottom
colors {
background $black
statusline $base07
separator $base04
# border back text
focused_workspace $base04 $base04 $base00
active_workspace $base04 $base04 $base00
urgent_workspace $base01 $base01 $base07
inactive_workspace $base00 $base00 $base07
}
status_command i3status-rs /etc/sway/status.toml
}
include /etc/sway/config.d/*
exec mako

109
dotfiles/sway/status.toml Normal file
View file

@ -0,0 +1,109 @@
[theme]
name = "plain"
[theme.overrides]
idle_bg = "#2d2a2e"
idle_fg = "#eeeeee"
info_bg = "#2d2a2e"
info_fg = "#eeeeee"
good_bg = "#2d2a2e"
good_fg = "#a9dc76"
warning_bg = "#2d2a2e"
warning_fg = "#ffd866"
critical_bg = "#2a2e38"
critical_fg = "#ff665c"
separator_bg = "#2d2a2e"
separator_fg = "#555555"
separator = "|"
[icons]
name = "none"
[icons.overrides]
bat = "  "
bat_full = "  "
bat_charging = "   "
bat_discharging = "  "
backlight_empty = "  "
backlight_partial1 = "  "
backlight_partial2 = "  "
backlight_partial3 = "  "
backlight_full = "  "
volume_full = "  "
volume_half = "  "
volume_empty = "  "
volume_muted= "MUTE"
cogs = "  "
memory_mem = "  "
headphones = "  "
net_wireless = " "
net_vpn = " "
net_wired = ""
net_up = "UP"
net_down = "DOWN"
thermometer = "  "
[[block]]
block = "net"
device = "wg"
ip = true
ssid = false
speed_up = false
speed_down = false
hide_inactive = true
hide_missing = true
[[block]]
block = "net"
device = "wlp0s20f3"
ip = true
ssid = true
speed_up = false
speed_down = false
hide_inactive = true
hide_missing = true
[[block]]
block = "temperature"
collapsed = false
interval = 10
chip = "coretemp-isa-0000"
format = "{min}..{max}°"
[[block]]
block = "disk_space"
path = "/"
alias = " /"
info_type = "available"
unit = "GB"
interval = 20
warning = 20.0
alert = 10.0
[[block]]
block = "memory"
display_type = "memory"
format_mem = "{Mup}%"
clickable = false
[[block]]
block = "load"
interval = 1
format = "{1m}"
[[block]]
block = "sound"
driver = "pulseaudio"
[[block]]
block = "backlight"
[[block]]
block = "battery"
device = "BAT0"
interval = 10
format = "{percentage}%"
[[block]]
block = "time"
interval = 60
format = "%Y-%m-%d %H:%M"

View file

@ -0,0 +1,44 @@
# 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, ... }:
{
imports =
[ <nixpkgs/nixos/modules/installer/scan/not-detected.nix>
];
boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ];
boot.initrd.kernelModules = [ ];
boot.extraModulePackages = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.initrd.luks.devices = {
swap = {
device = "/dev/disk/by-uuid/fe87a31c-7d0b-4073-98fc-fa825de77181";
allowDiscards = true;
};
};
fileSystems."/" =
{ device = "tank/root/nixos";
fsType = "zfs";
};
fileSystems."/home" =
{ device = "tank/home";
fsType = "zfs";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/0C2D-2799";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/2ac33f61-0db5-4f94-8148-93f2166b2f29"; }
];
nix.maxJobs = lib.mkDefault 4;
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
}

113
packages/neovim.nix Normal file
View file

@ -0,0 +1,113 @@
with import <nixos-unstable> {};
neovim.override {
configure = {
customRC = ''
set hidden
" langserver
let g:LanguageClient_serverCommands = {
\ 'go': ['gopls'],
\ 'python': ['pyls'],
\ 'rust': ['rust-analyzer'],
\ }
" basic builtin
set background=dark
set shiftwidth=4
set softtabstop=4
set tabstop=4
set expandtab
set ttyfast
set lazyredraw
set regexpengine=1
set synmaxcol=500
set relativenumber
set number
set relativenumber
set mouse=a
set shortmess+=c
" better search
set incsearch
set ignorecase
set smartcase
set gdefault
" autocomplete
autocmd BufEnter * call ncm2#enable_for_buffer()
inoremap <c-c> <ESC>
inoremap <expr> <CR> (pumvisible() ? "\<c-y>\<cr>" : "\<CR>")
set completeopt=noinsert,menuone,noselect
let g:LanguageClient_completionPreferTextEdit = 1
let g:LanguageClient_diagnosticsSignsMax = 0
" securemodelines
let g:secure_modelines_allowed_items = [
\ "textwidth", "tw",
\ "softtabstop", "sts",
\ "tabstop", "ts",
\ "shiftwidth", "sw",
\ "expandtab", "et", "noexpandtab", "noet",
\ "filetype", "ft",
\ "foldmethod", "fdm",
\ "readonly", "ro", "noreadonly", "noro",
\ "rightleft", "rl", "norightleft", "norl",
\ "colorcolumn"
\ ]
" leader
let mapleader = " "
nnoremap <silent> <leader> :WhichKey '<Space>'<CR>
noremap <leader><space> :Commands<cr>
noremap <leader><tab> :b#<cr>
let g:which_key_map = {}
let g:which_key_map.f = { 'name': '+files' }
noremap <leader>ff :FZF<cr>
noremap <leader>fc :saveas
let g:which_key_map.y = { 'name': '+yank' }
noremap <leader>yp :read !wl-paste<cr>
noremap <leader>yy :read !wl-paste<cr>
noremap <leader>ya :w !wl-copy<cr><cr>
let g:which_key_map.b = { 'name': '+buffers' }
noremap <leader>bb :Buffers<cr>
noremap <leader>bh :History<cr>
noremap <leader>bd :bd<cr>
noremap <leader>bn :bn<cr>
noremap <leader>bp :bp<cr>
let g:which_key_map.b = { 'name': '+lang' }
noremap <leader>mc :call LanguageClient#textDocument_references()<cr>
noremap <leader>mf :call LanguageClient#textDocument_formatting()<cr>
noremap <leader>mgg :call LanguageClient#textDocument_definition()<cr>
noremap <leader>mh :call LanguageClient#textDocument_documentHighlight()<cr>
noremap <leader>mm :call LanguageClient#textDocument_hover()<cr>
noremap <leader>mr :call LanguageClient#textDocument_rename()<cr>
noremap <leader>ms :call LanguageClient#workspace_symbol()<cr>
" lang specifics
let g:rustfmt_autosave = 1
let g:rustfmt_emit_files = 1
let g:rustfmt_fail_silently = 0
'';
packages.myNvim = with pkgs.vimPlugins; {
start = [
airline
easymotion
editorconfig-vim
fugitive
fzf
LanguageClient-neovim
ncm2
surround
syntastic
vim-addon-nix
vim-highlightedyank
vim-which-key
];
};
};
}

30
packages/vim.nix Normal file
View file

@ -0,0 +1,30 @@
with import <nixpkgs> {};
vim_configurable.customize {
name = "vim";
vimrcConfig.customRC = ''
set hidden
" langserver
let g:LanguageClient_serverCommands = {
\ 'rust': ['rust-analyzer'],
\ 'python': ['pyls'],
\ }
let g:deoplete#enable_at_startup = 1
'';
vimrcConfig.packages.myVim = with pkgs.vimPlugins; {
start = [
airline
easymotion
fugitive
fzf
LanguageClient-neovim
surround
syntastic
vim-mucomplete
];
};
}

67
roles/base.nix Normal file
View file

@ -0,0 +1,67 @@
# 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, ... }:
{
environment.systemPackages = with pkgs; [
bash
bat
emacs-nox
fd
fzf
git
htop
jq
ripgrep
z-lua
# (import ../packages/vim.nix)
(import ../packages/neovim.nix)
];
programs.bash = {
interactiveShellInit = ''
pw () {
len=''${1:-$(( $RANDOM % 24 + 8 ))}
tr -dc a-zA-Z0-9 < /dev/urandom | head -c $len
echo
}
cdg() {
gitroot=$(until [ -d .git ]; do [ "$PWD" == "/" ] && exit 1; cd ..; done; echo $PWD)
if [ $? == 0 ]; then
cd $gitroot
else
echo "gitroot not found."
return 1
fi
}
git_branch(){
branch=$(git branch 2> /dev/null) || exit 0
branch=$(sed -n '/^*/ s/* \(.*\)/\1/p' <<< $branch)
status=$(git status 2> /dev/null \
| grep -q "nothing to commit, working tree clean" || e cho -n '*')
echo "$branch$status "
}
. "$(fzf-share)/key-bindings.bash"
. "$(fzf-share)/completion.bash"
eval $(z --init bash)
'';
shellAliases = {
cat = "bat -pp";
less = "bat -p";
ls = "ls --color=auto";
vim = "nvim";
};
};
users.users.stefan = {
extraGroups = [ "wheel" ];
home = "/home/stefan";
isNormalUser = true;
uid = 1000;
};
}

75
roles/desktop.nix Normal file
View file

@ -0,0 +1,75 @@
# 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, ... }:
{
programs.sway = {
enable = true;
extraPackages = with pkgs; [
bemenu
grim
i3status-rust
kanshi
mako
slurp
swayidle
swaylock
];
};
environment = {
etc = {
"sway/config".source = ../dotfiles/sway/config;
"sway/status.toml".source = ../dotfiles/sway/status.toml;
};
};
sound.enable = true;
hardware.pulseaudio.enable = true;
fonts.enableDefaultFonts = true;
fonts.fontconfig.antialias = true;
fonts.fonts = with pkgs; [
cascadia-code
font-awesome
noto-fonts
noto-fonts-emoji
];
environment.systemPackages = with pkgs; [
alacritty
firefox
keepassxc
neofetch
pulseaudio
pulsemixer
(
pkgs.writeTextFile {
name = "startsway";
destination = "/bin/startsway";
executable = true;
text = ''
#! ${pkgs.bash}/bin/bash
export MOZ_ENABLE_WAYLAND=1
export QT_QPA_PLATFORM=wayland-egl
export QT_WAYLAND_FORCE_DPI=physical
export SDL_VIDEODRIVER=wayland
export _JAVA_AWT_WM_NOREPARENTING=1
exec ${pkgs.dbus}/bin/dbus-run-session ${pkgs.sway}/bin/sway
'';
}
)
];
services.syncthing = {
enable = true;
openDefaultPorts = true;
user = "stefan";
group = "users";
dataDir = "/home/stefan";
};
services.printing.enable = true;
}

21
roles/dev.nix Normal file
View file

@ -0,0 +1,21 @@
# 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, ... }:
let
unstable = import <nixos-unstable> {};
mozilla_overlay = import <mozilla> {};
in {
environment.systemPackages = with pkgs; [
go
python37
python37Packages.pyls-black
python37Packages.pyls-isort
python37Packages.pyls-mypy
rustup
unstable.gopls
unstable.rust-analyzer
];
}