{ config, libs, pkgs, ... }: { targets.genericLinux.enable = true; home.username = "stefan"; home.homeDirectory = "/home/stefan"; home.stateVersion = "24.11"; nixGL.packages = import { inherit pkgs; }; nixGL.defaultWrapper = "mesa"; fonts.fontconfig.enable = true; home.packages = with pkgs; [ wl-clipboard mako wmenu i3status nerd-fonts.comic-shanns-mono (writeShellScriptBin "browser" '' swaymsg 'set $PROP newcont:tabbed ; exec qutebrowser --target window' '') (writeShellScriptBin "exit-sway" '' pkill pipewire swaymsg exit '') ]; home.file = { }; home.sessionVariables = { EDITOR = "nvim"; XDG_CACHE_HOME="$(mktemp -d)"; }; # Let Home Manager install and manage itself. programs.home-manager.enable = true; # TODO: https://github.com/nix-community/neovim-nightly-overlay programs.neovim = { enable = true; defaultEditor = true; viAlias = true; vimAlias = true; vimdiffAlias = true; extraLuaConfig = '' vim.g.mapleader = ' ' vim.o.number = true vim.o.relativenumber = true vim.o.splitright = true vim.o.splitbelow = true vim.o.scrolloff = 15 vim.o.wrap = false vim.o.lbr = true vim.o.shortmess = vim.o.shortmess .. "I" vim.o.termguicolors = true vim.opt.fillchars = {eob = " "} --vim.o.smd = false --vim.opt.laststatus = 3 vim.opt.pumheight = 6 vim.opt.shiftwidth = 8 vim.opt.tabstop = 8 vim.opt.expandtab = true vim.o.mouse="" vim.o.guicursor="" vim.o.swapfile=false -- i like to have right-aligned current line nr. might not work well with all colorschemes --vim.o.statuscolumn='%s%=%{v:relnum?v:relnum:v:lnum} ' -- keybinds local function swap(mode, a, b) local tmp=a vim.keymap.set(mode, a, b) vim.keymap.set(mode, b, tmp) end local function snv(a, b) swap({'n', 'v'}, a, b) end snv('m', 'h') snv('n', 'j') snv('e', 'k') snv('i', 'l') snv('M', 'H') snv('N', 'J') --snv('E', 'K') snv('I', 'L') ''; }; programs.qutebrowser = { enable = true; package = config.lib.nixGL.wrap pkgs.qutebrowser; loadAutoconfig = true; }; programs.git = { enable = true; userName = "Stefan Weigl-Bosker"; userEmail = "stefan@s00.xyz"; }; wayland.windowManager.sway = { enable = true; package = config.lib.nixGL.wrap pkgs.sway; config = rec { modifier = "Mod1"; left = "m"; down = "n"; up = "e"; right = "i"; fonts = { names = [ "ComicShannsMono Nerd Font Mono" ]; # material size = 11.0; }; terminal = "foot"; menu = "wmenu-run -n 4c4c4c -N 0d0d0d -s 8aac8b -S 0d0d0d -l 10"; defaultWorkspace = "workspace number 1"; input = { "type:keyboard" = { xkb_layout = "us"; xkb_variant = "colemak_dh"; }; "type:touchpad" = { dwt = "enabled"; # turn off if u are a gamer tap = "enabled"; middle_emulation = "enabled"; }; }; output = { "*" = { bg = "#0d0d0d solid_color"; }; "eDP-1" = { mode = "2880x1920@120.00Hz"; scale = "2.0"; }; }; colors = { background = "#0f0f0f"; focused = { border = "#191919" ; background = "#191919"; text = "#ac8aac"; indicator = "#282a2e"; childBorder = "#8aac8b"; }; focusedInactive = { border = "#191919"; background = "#191919"; text = "#ac8aac"; indicator = "#282a2e"; childBorder = "#191919"; }; unfocused = { border = "#191919"; background = "#191919"; text = "#4c4c4c"; indicator = "#0f0f0f"; childBorder = "#191919"; }; }; bars = [{ statusCommand = "i3status"; mode = "hide"; hiddenState = "hide"; fonts = { names = [ "ComicShannsMono Nerd Font Mono" ]; size = "10.0"; }; extraConfig = '' modifier ${modifier} ''; colors = { background = "#0d0d0d"; statusline = "#cacaca"; focusedWorkspace = { border = "#0d0d0d"; background = "#0d0d0d"; text = "#ac8aac"; }; activeWorkspace = { border = "#0d0d0d"; background = "#0d0d0d"; text = "#4c4c4c"; }; inactiveWorkspace = { border = "#0d0d0d"; background = "#0d0d0d"; text = "#4c4c4c"; }; bindingMode = { border = "#0d0d0d"; background = "#0d0d0d"; text = "#ac8aac"; }; }; }]; focus = { followMouse = false; wrapping = "force"; }; window = { border = 1; hideEdgeBorders = "--i3 smart"; commands = [ { command = "mark --add \"prop:$$PROP:\""; criteria = { shell = "."; }; } { command = "splith"; criteria = { con_mark = "^prop.*:newcont:"; }; } { command = "layout tabbed"; criteria = { con_mark = "^prop.*:tabbed:"; }; } { command = "mark --toggle \"prop:$$PROP:\" ; set $$PROP none"; criteria = { con_mark = "^prop:"; }; } ]; }; keybindings = { "${modifier}+Return" = "exec ${terminal}"; "${modifier}+Shift+w" = "exec browser"; "${modifier}+d" = "exec ${menu}"; "${modifier}+Shift+c" = "kill"; "${modifier}+Shift+r" = "reload"; "${modifier}+Shift+q" = "exec swaynag -t warning -m 'do you really want to exit?' -B 'yes, exit' 'exit-sway'"; "${modifier}+${left}" = "focus left"; "${modifier}+${down}" = "focus down"; "${modifier}+${up}" = "focus up"; "${modifier}+${right}" = "focus right"; "${modifier}+a" = "focus parent"; "${modifier}+s" = "focus child"; "${modifier}+Shift+${left}" = "move left"; "${modifier}+Shift+${down}" = "move down"; "${modifier}+Shift+${up}" = "move up"; "${modifier}+Shift+${right}" = "move right"; "${modifier}+r" = "mode resize"; "${modifier}+1" = "workspace number 1"; "${modifier}+2" = "workspace number 2"; "${modifier}+3" = "workspace number 3"; "${modifier}+4" = "workspace number 4"; "${modifier}+5" = "workspace number 5"; "${modifier}+6" = "workspace number 6"; "${modifier}+7" = "workspace number 7"; "${modifier}+8" = "workspace number 8"; "${modifier}+9" = "workspace number 9"; "${modifier}+0" = "workspace number 0"; "${modifier}+Shift+1" = "move container to workspace number 1"; "${modifier}+Shift+2" = "move container to workspace number 2"; "${modifier}+Shift+3" = "move container to workspace number 3"; "${modifier}+Shift+4" = "move container to workspace number 4"; "${modifier}+Shift+5" = "move container to workspace number 5"; "${modifier}+Shift+6" = "move container to workspace number 6"; "${modifier}+Shift+7" = "move container to workspace number 7"; "${modifier}+Shift+8" = "move container to workspace number 8"; "${modifier}+Shift+9" = "move container to workspace number 9"; "${modifier}+Shift+0" = "move container to workspace number 0"; "${modifier}+Shift+minus" = "move scratchpad"; "${modifier}+minus" = "scratchpad show"; "${modifier}+h" = "splith"; "${modifier}+v" = "splitv"; "${modifier}+Shift+s" = "layout stacking"; "${modifier}+w" = "layout tabbed"; "${modifier}+t" = "layout toggle split"; "${modifier}+Shift+space" = "floating toggle"; "${modifier}+space" = "focus mode_toggle"; "${modifier}+Shift+f" = "fullscreen"; "--locked XF86AudioRaiseVolume" = "exec volumectl -d -u up"; "--locked XF86AudioLowerVolume" = "exec volumectl -d -u down"; "--locked XF86AudioMute" = "exec volumectl -d toggle-mute"; "--locked XF86AudioMicMute" = "exec volumectl -d -m toggle-mute"; "--locked XF86MonBrightnessDown" = "exec lightctl -d down"; "--locked XF86MonBrightnessUp" = "exec lightctl -d up"; }; startup = [ { command = "foot -s"; } { command = "wayneko --layer bottom --follow-pointer true --background-colour 0xcacaca --outline-colour 0x0f0f0f"; } { command = "pipewire"; always = true; } # TODO need to fix this instead of running a new session every time { command = "mpd"; } { command = "mpdscribble"; } { command = "avizo-service"; } # disable if on nixos or systemd ]; seat = { "*" = { hide_cursor = "1500"; xcursor_theme = "Adwaita 18"; }; }; }; extraConfigEarly = '' set $PROP none ''; extraConfig = '' title_align center default_border pixel 1 ''; }; programs.foot = { enable = true; server = { enable = true; }; settings = { main = { font="ComicShannsMono Nerd Font Mono:size=12"; title="term"; resize-by-cells="no"; pad="0x0 center"; }; desktop-notifications.command = "notify-send -a \${app-id} -i \${app-id} \${title} \${body}"; url.label-letters="arstneio"; cursor = { style="block"; blink="no"; color="0f0f0f cacaca"; }; colors = { foreground="cacaca"; background="0f0f0f"; regular0="0f0f0f"; regular1="ac8a8c"; regular2="8aac8b"; regular3="aca98a"; regular4="8f8aac"; regular5="ac8aac"; regular6="8aabac"; regular7="cacaca"; bright0="262626 "; bright1="c49ea0 "; bright2="9ec49f "; bright3="c4c19e "; bright4="a39ec4 "; bright5="c49ec4 "; bright6="9ec3c4 "; bright7="f5f5f5 "; "16"="ceb188"; "17"="ac8a8c"; "18"="191919"; "19"="262626"; "20"="ac8a8c"; "21"="e7e7e7"; }; }; }; services.avizo = { enable = true; }; }