Compare commits
2 commits
4412180b3a
...
d994dfb9fb
Author | SHA1 | Date | |
---|---|---|---|
Geoffrey Frogeye | d994dfb9fb | ||
Geoffrey Frogeye | 2ad4bee0f9 |
|
@ -55,7 +55,6 @@
|
||||||
|
|
||||||
# Imported from scripts
|
# Imported from scripts
|
||||||
rms = ''${pkgs.findutils}/bin/find . -name "*.sync-conflict-*" -delete''; # Remove syncthing conflict files
|
rms = ''${pkgs.findutils}/bin/find . -name "*.sync-conflict-*" -delete''; # Remove syncthing conflict files
|
||||||
pw = ''${pkgs.pwgen}/bin/pwgen 32 -y''; # Generate passwords. ln((26*2+10)**32)/ln(2) ≅ 190 bits of entropy
|
|
||||||
newestFile = ''${pkgs.findutils}/bin/find -type f -printf '%T+ %p\n' | sort | tail'';
|
newestFile = ''${pkgs.findutils}/bin/find -type f -printf '%T+ %p\n' | sort | tail'';
|
||||||
oldestFile = ''${pkgs.findutils}/bin/find -type f -printf '%T+ %p\n' | sort | head'';
|
oldestFile = ''${pkgs.findutils}/bin/find -type f -printf '%T+ %p\n' | sort | head'';
|
||||||
};
|
};
|
||||||
|
@ -125,7 +124,6 @@
|
||||||
};
|
};
|
||||||
tmux.enable = true;
|
tmux.enable = true;
|
||||||
translate-shell.enable = true; # TODO Cool config?
|
translate-shell.enable = true; # TODO Cool config?
|
||||||
password-store.enable = true;
|
|
||||||
};
|
};
|
||||||
home = {
|
home = {
|
||||||
activation = {
|
activation = {
|
||||||
|
@ -184,10 +182,6 @@
|
||||||
sox
|
sox
|
||||||
imagemagick
|
imagemagick
|
||||||
numbat
|
numbat
|
||||||
|
|
||||||
# password
|
|
||||||
pwgen
|
|
||||||
|
|
||||||
];
|
];
|
||||||
sessionVariables = {
|
sessionVariables = {
|
||||||
# Favourite commands
|
# Favourite commands
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
./monitoring
|
./monitoring
|
||||||
./nix
|
./nix
|
||||||
./pager
|
./pager
|
||||||
|
./password
|
||||||
./prompt
|
./prompt
|
||||||
./rebuild
|
./rebuild
|
||||||
./shell
|
./shell
|
||||||
|
|
22
hm/desktop/audio/default.nix
Normal file
22
hm/desktop/audio/default.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
pactl = "exec ${pkgs.pulseaudio}/bin/pactl"; # TODO Use NixOS package if using NixOS
|
||||||
|
mod = config.xsession.windowManager.i3.config.modifier;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pavucontrol # Because can't use Win+F1X on Pinebook 🙃
|
||||||
|
];
|
||||||
|
xsession.windowManager.i3.config.keybindings =
|
||||||
|
{
|
||||||
|
"XF86AudioRaiseVolume" = "${pactl} set-sink-mute @DEFAULT_SINK@ false; ${pactl} set-sink-volume @DEFAULT_SINK@ +5%";
|
||||||
|
"XF86AudioLowerVolume" = "${pactl} set-sink-mute @DEFAULT_SINK@ false; ${pactl} set-sink-volume @DEFAULT_SINK@ -5%";
|
||||||
|
"XF86AudioMute" = "${pactl} set-sink-mute @DEFAULT_SINK@ true";
|
||||||
|
"${mod}+F7" = "${pactl} suspend-sink @DEFAULT_SINK@ 1; ${pactl} suspend-sink @DEFAULT_SINK@ 0"; # Re-synchronize bluetooth headset
|
||||||
|
"${mod}+F11" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
|
||||||
|
"${mod}+F12" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
|
||||||
|
# TODO Find pacmixer?
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -5,9 +5,13 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
|
./audio
|
||||||
./frobar
|
./frobar
|
||||||
./i3.nix
|
./i3.nix
|
||||||
|
./lock
|
||||||
|
./mpd
|
||||||
./qutebrowser.nix
|
./qutebrowser.nix
|
||||||
|
./screenshots
|
||||||
];
|
];
|
||||||
config = lib.mkIf config.frogeye.desktop.xorg {
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
xsession = {
|
xsession = {
|
||||||
|
@ -154,9 +158,6 @@ in
|
||||||
publicShare = null;
|
publicShare = null;
|
||||||
templates = null;
|
templates = null;
|
||||||
videos = "${config.home.homeDirectory}/Vidéos";
|
videos = "${config.home.homeDirectory}/Vidéos";
|
||||||
extraConfig = {
|
|
||||||
XDG_SCREENSHOTS_DIR = "${config.home.homeDirectory}/Screenshots";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
configFile = {
|
configFile = {
|
||||||
"pulse/client.conf" = {
|
"pulse/client.conf" = {
|
||||||
|
@ -222,17 +223,6 @@ in
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
mpd = {
|
|
||||||
enable = true;
|
|
||||||
network = {
|
|
||||||
listenAddress = "0.0.0.0"; # So it can be controlled from home
|
|
||||||
# TODO ... and whoever is the Wi-Fi network I'm using, which, not great
|
|
||||||
startWhenNeeded = true;
|
|
||||||
};
|
|
||||||
extraConfig = ''
|
|
||||||
restore_paused "yes"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
autorandr.enable = true;
|
autorandr.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -249,11 +239,6 @@ in
|
||||||
# remote
|
# remote
|
||||||
tigervnc
|
tigervnc
|
||||||
|
|
||||||
# music
|
|
||||||
mpc-cli
|
|
||||||
ashuffle
|
|
||||||
vimpc
|
|
||||||
|
|
||||||
# multimedia common
|
# multimedia common
|
||||||
gimp
|
gimp
|
||||||
inkscape
|
inkscape
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ pkgs ? import <nixpkgs> { config = { }; overlays = [ ]; }, ... }:
|
{ pkgs ? import <nixpkgs> { config = { }; overlays = [ ]; }, lib, config, ... }:
|
||||||
# Tried using pyproject.nix but mpd2 dependency wouldn't resolve,
|
# Tried using pyproject.nix but mpd2 dependency wouldn't resolve,
|
||||||
# is called pyton-mpd2 on PyPi but mpd2 in nixpkgs.
|
# is called pyton-mpd2 on PyPi but mpd2 in nixpkgs.
|
||||||
let
|
let
|
||||||
|
@ -22,7 +22,7 @@ let
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config = {
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
xsession.windowManager.i3.config.bars = [ ];
|
xsession.windowManager.i3.config.bars = [ ];
|
||||||
programs.autorandr.hooks.postswitch = {
|
programs.autorandr.hooks.postswitch = {
|
||||||
frobar = "${pkgs.systemd}/bin/systemctl --user restart frobar";
|
frobar = "${pkgs.systemd}/bin/systemctl --user restart frobar";
|
||||||
|
|
|
@ -1,37 +1,5 @@
|
||||||
{ pkgs, lib, config, ... }:
|
{ pkgs, lib, config, ... }:
|
||||||
let
|
let
|
||||||
# LOCKER
|
|
||||||
# lockColors = with config.lib.stylix.colors.withHashtag; { a = base00; b = base01; d = base00; }; # Black or White, depending on current theme
|
|
||||||
# lockColors = with config.lib.stylix.colors.withHashtag; { a = base0A; b = base0B; d = base00; }; # Green + Yellow
|
|
||||||
lockColors = { a = "#82a401"; b = "#466c01"; d = "#648901"; }; # Old
|
|
||||||
lockSvg = pkgs.writeText "lock.svg" "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 50\" height=\"50\" width=\"50\"><path fill=\"${lockColors.a}\" d=\"M0 50h50V0H0z\"/><path d=\"M0 0l50 50H25L0 25zm50 0v25L25 0z\" fill=\"${lockColors.b}\"/></svg>";
|
|
||||||
lockPng = pkgs.runCommand "lock.png" { } "${pkgs.imagemagick}/bin/convert ${lockSvg} $out";
|
|
||||||
locker = pkgs.writeShellScript "i3-locker" ''
|
|
||||||
# Remove SSH and GPG keys from keystores
|
|
||||||
${pkgs.openssh}/bin/ssh-add -D
|
|
||||||
echo RELOADAGENT | ${pkgs.gnupg}/bin/gpg-connect-agent
|
|
||||||
${pkgs.coreutils}/bin/rm -rf "/tmp/cached_pass_$UID"
|
|
||||||
|
|
||||||
${pkgs.lightdm}/bin/dm-tool lock
|
|
||||||
# TODO Does that work for all DMs?
|
|
||||||
# TODO Might want to use i3lock on NixOS configs still?
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
if [ -d ${config.xdg.cacheHome}/lockpatterns ]
|
|
||||||
then
|
|
||||||
pattern=$(${pkgs.findutils} ${config.xdg.cacheHome}/lockpatterns | sort -R | head -1)
|
|
||||||
else
|
|
||||||
pattern=${lockPng}
|
|
||||||
fi
|
|
||||||
revert() {
|
|
||||||
${pkgs.xorg.xset}/bin/xset dpms 0 0 0
|
|
||||||
}
|
|
||||||
trap revert SIGHUP SIGINT SIGTERM
|
|
||||||
${pkgs.xorg.xset}/bin/xset dpms 5 5 5
|
|
||||||
${pkgs.i3lock}/bin/i3lock --nofork --color ${builtins.substring 1 6 lockColors.d} --image=$pattern --tiling --ignore-empty-password
|
|
||||||
revert
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
|
|
||||||
# FOCUS
|
# FOCUS
|
||||||
focus = "exec ${ pkgs.writeShellScript "i3-focus-window" ''
|
focus = "exec ${ pkgs.writeShellScript "i3-focus-window" ''
|
||||||
WINDOW=`${pkgs.xdotool}/bin/xdotool getwindowfocus`
|
WINDOW=`${pkgs.xdotool}/bin/xdotool getwindowfocus`
|
||||||
|
@ -75,9 +43,6 @@ in
|
||||||
let
|
let
|
||||||
mod = config.xsession.windowManager.i3.config.modifier;
|
mod = config.xsession.windowManager.i3.config.modifier;
|
||||||
rofi = "exec --no-startup-id ${config.programs.rofi.package}/bin/rofi";
|
rofi = "exec --no-startup-id ${config.programs.rofi.package}/bin/rofi";
|
||||||
pactl = "exec ${pkgs.pulseaudio}/bin/pactl"; # TODO Use NixOS package if using NixOS
|
|
||||||
screenshots_dir = config.xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR;
|
|
||||||
scrot = "${pkgs.scrot}/bin/scrot --exec '${pkgs.coreutils}/bin/mv $f ${screenshots_dir}/ && ${pkgs.optipng}/bin/optipng ${screenshots_dir}/$f'";
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Compatibility layer for people coming from other backgrounds
|
# Compatibility layer for people coming from other backgrounds
|
||||||
|
@ -88,9 +53,6 @@ in
|
||||||
"${mod}+z" = "kill";
|
"${mod}+z" = "kill";
|
||||||
button2 = "kill";
|
button2 = "kill";
|
||||||
# Rofi
|
# Rofi
|
||||||
"${mod}+c" = "exec --no-startup-id ${config.programs.rofi.pass.package}/bin/rofi-pass --last-used";
|
|
||||||
# TODO Try autopass.cr
|
|
||||||
# 23.11 config.programs.rofi.pass.package
|
|
||||||
"${mod}+i" = "exec --no-startup-id ${pkgs.rofimoji}/bin/rofimoji";
|
"${mod}+i" = "exec --no-startup-id ${pkgs.rofimoji}/bin/rofimoji";
|
||||||
"${mod}+plus" = "${rofi} -modi ssh -show ssh";
|
"${mod}+plus" = "${rofi} -modi ssh -show ssh";
|
||||||
"${mod}+ù" = "${rofi} -modi ssh -show ssh -ssh-command '{terminal} -e {ssh-client} {host} -t \"sudo -s -E\"'";
|
"${mod}+ù" = "${rofi} -modi ssh -show ssh -ssh-command '{terminal} -e {ssh-client} {host} -t \"sudo -s -E\"'";
|
||||||
|
@ -107,18 +69,6 @@ in
|
||||||
}";
|
}";
|
||||||
"${mod}+Shift+Return" = "exec ${config.programs.urxvt.package}/bin/urxvt";
|
"${mod}+Shift+Return" = "exec ${config.programs.urxvt.package}/bin/urxvt";
|
||||||
"${mod}+p" = "exec ${pkgs.xfce.thunar}/bin/thunar";
|
"${mod}+p" = "exec ${pkgs.xfce.thunar}/bin/thunar";
|
||||||
# Volume control
|
|
||||||
"XF86AudioRaiseVolume" = "${pactl} set-sink-mute @DEFAULT_SINK@ false; ${pactl} set-sink-volume @DEFAULT_SINK@ +5%";
|
|
||||||
"XF86AudioLowerVolume" = "${pactl} set-sink-mute @DEFAULT_SINK@ false; ${pactl} set-sink-volume @DEFAULT_SINK@ -5%";
|
|
||||||
"XF86AudioMute" = "${pactl} set-sink-mute @DEFAULT_SINK@ true";
|
|
||||||
"${mod}+F7" = "${pactl} suspend-sink @DEFAULT_SINK@ 1; ${pactl} suspend-sink @DEFAULT_SINK@ 0"; # Re-synchronize bluetooth headset
|
|
||||||
"${mod}+F11" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
|
|
||||||
"${mod}+F12" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
|
|
||||||
# TODO Find pacmixer?
|
|
||||||
# Media control
|
|
||||||
"XF86AudioPrev" = "exec ${pkgs.mpc-cli}/bin/mpc prev";
|
|
||||||
"XF86AudioPlay" = "exec ${pkgs.mpc-cli}/bin/mpc toggle";
|
|
||||||
"XF86AudioNext" = "exec ${pkgs.mpc-cli}/bin/mpc next";
|
|
||||||
# Backlight
|
# Backlight
|
||||||
"XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set +5%";
|
"XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set +5%";
|
||||||
"XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 5%-";
|
"XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl set 5%-";
|
||||||
|
@ -129,11 +79,6 @@ in
|
||||||
${pkgs.libgnomekbd}/bin/gkbd-keyboard-display -l $layout
|
${pkgs.libgnomekbd}/bin/gkbd-keyboard-display -l $layout
|
||||||
''
|
''
|
||||||
}";
|
}";
|
||||||
# Screenshots
|
|
||||||
"Print" = "exec ${scrot} --focused";
|
|
||||||
"${mod}+Print" = "exec ${scrot}";
|
|
||||||
"Ctrl+Print" = "exec ${pkgs.coreutils}/bin/sleep 1 && ${scrot} --select";
|
|
||||||
# TODO Try using bindsym --release instead of sleep
|
|
||||||
# change focus
|
# change focus
|
||||||
"${mod}+h" = "focus left; ${focus}";
|
"${mod}+h" = "focus left; ${focus}";
|
||||||
"${mod}+j" = "focus down; ${focus}";
|
"${mod}+j" = "focus down; ${focus}";
|
||||||
|
@ -212,11 +157,6 @@ in
|
||||||
"${mod}+Shift+c" = "reload";
|
"${mod}+Shift+c" = "reload";
|
||||||
"${mod}+Shift+r" = "restart";
|
"${mod}+Shift+r" = "restart";
|
||||||
"${mod}+Shift+e" = "exit";
|
"${mod}+Shift+e" = "exit";
|
||||||
# Screen off commands
|
|
||||||
"${mod}+F1" = "exec --no-startup-id ${pkgs.bash}/bin/sh -c \"${pkgs.coreutils}/bin/sleep .25 && ${pkgs.xorg.xset}/bin/xset dpms force off\"";
|
|
||||||
# TODO --release?
|
|
||||||
"${mod}+F4" = "exec --no-startup-id ${pkgs.xautolock}/bin/xautolock -disable";
|
|
||||||
"${mod}+F5" = "exec --no-startup-id ${pkgs.xautolock}/bin/xautolock -enable";
|
|
||||||
# Modes
|
# Modes
|
||||||
"${mod}+Escape" = "mode ${mode_system}";
|
"${mod}+Escape" = "mode ${mode_system}";
|
||||||
"${mod}+r" = "mode ${mode_resize}";
|
"${mod}+r" = "mode ${mode_resize}";
|
||||||
|
@ -224,16 +164,17 @@ in
|
||||||
"${mod}+t" = "mode ${mode_screen}";
|
"${mod}+t" = "mode ${mode_screen}";
|
||||||
"${mod}+y" = "mode ${mode_temp}";
|
"${mod}+y" = "mode ${mode_temp}";
|
||||||
};
|
};
|
||||||
|
# TOOD Config option so we don't have to separate name and binding
|
||||||
modes = let return_bindings = {
|
modes = let return_bindings = {
|
||||||
"Return" = "mode default";
|
"Return" = "mode default";
|
||||||
"Escape" = "mode default";
|
"Escape" = "mode default";
|
||||||
}; in
|
}; in
|
||||||
{
|
{
|
||||||
"${mode_system}" = {
|
"${mode_system}" = {
|
||||||
"l" = "exec --no-startup-id exec ${locker}, mode default";
|
"l" = "exec --no-startup-id exec xlock, mode default";
|
||||||
"e" = "exit, mode default";
|
"e" = "exit, mode default";
|
||||||
"s" = "exec --no-startup-id exec ${locker} & ${pkgs.systemd}/bin/systemctl suspend --check-inhibitors=no, mode default";
|
"s" = "exec --no-startup-id exec xlock & ${pkgs.systemd}/bin/systemctl suspend --check-inhibitors=no, mode default";
|
||||||
"h" = "exec --no-startup-id exec ${locker} & ${pkgs.systemd}/bin/systemctl hibernate, mode default";
|
"h" = "exec --no-startup-id exec xlock & ${pkgs.systemd}/bin/systemctl hibernate, mode default";
|
||||||
"r" = "exec --no-startup-id ${pkgs.systemd}/bin/systemctl reboot, mode default";
|
"r" = "exec --no-startup-id ${pkgs.systemd}/bin/systemctl reboot, mode default";
|
||||||
"p" = "exec --no-startup-id ${pkgs.systemd}/bin/systemctl poweroff -i, mode default";
|
"p" = "exec --no-startup-id ${pkgs.systemd}/bin/systemctl poweroff -i, mode default";
|
||||||
} // return_bindings;
|
} // return_bindings;
|
||||||
|
@ -294,14 +235,11 @@ in
|
||||||
};
|
};
|
||||||
floating = {
|
floating = {
|
||||||
criteria = [
|
criteria = [
|
||||||
{ title = "pacmixer"; }
|
|
||||||
{ window_role = "pop-up"; }
|
{ window_role = "pop-up"; }
|
||||||
{ window_role = "task_dialog"; }
|
{ window_role = "task_dialog"; }
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
startup = [
|
startup = [
|
||||||
# Lock screen after 10 minutes
|
|
||||||
{ notification = false; command = "${pkgs.xautolock}/bin/xautolock -time 10 -locker '${pkgs.xorg.xset}/bin/xset dpms force standby' -killtime 1 -killer ${locker}"; }
|
|
||||||
{
|
{
|
||||||
notification = false;
|
notification = false;
|
||||||
command = "${pkgs.writeShellApplication {
|
command = "${pkgs.writeShellApplication {
|
||||||
|
@ -312,7 +250,6 @@ in
|
||||||
# TODO Only on computers with battery
|
# TODO Only on computers with battery
|
||||||
}}/bin/batteryNotify";
|
}}/bin/batteryNotify";
|
||||||
}
|
}
|
||||||
# TODO There's a services.screen-locker.xautolock but not sure it can match the above command
|
|
||||||
];
|
];
|
||||||
workspaceLayout = "tabbed";
|
workspaceLayout = "tabbed";
|
||||||
focus.mouseWarping = true; # i3 only supports warping to workspace, hence ${focus}
|
focus.mouseWarping = true; # i3 only supports warping to workspace, hence ${focus}
|
||||||
|
|
64
hm/desktop/lock/default.nix
Normal file
64
hm/desktop/lock/default.nix
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
# lockColors = with config.lib.stylix.colors.withHashtag; { a = base00; b = base01; d = base00; }; # Black or White, depending on current theme
|
||||||
|
# lockColors = with config.lib.stylix.colors.withHashtag; { a = base0A; b = base0B; d = base00; }; # Green + Yellow
|
||||||
|
lockColors = { a = "#82a401"; b = "#466c01"; d = "#648901"; }; # Old
|
||||||
|
lockSvg = pkgs.writeText "lock.svg" ''
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" height="50" width="50">
|
||||||
|
<path fill="${lockColors.a}" d="M0 50h50V0H0z"/>
|
||||||
|
<path d="M0 0l50 50H25L0 25zm50 0v25L25 0z" fill="${lockColors.b}"/>
|
||||||
|
</svg>
|
||||||
|
'';
|
||||||
|
lockPng = pkgs.runCommand "lock.png" { } "${pkgs.imagemagick}/bin/convert ${lockSvg} $out";
|
||||||
|
mod = config.xsession.windowManager.i3.config.modifier;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
(pkgs.writeShellApplication {
|
||||||
|
name = "xlock";
|
||||||
|
text = ''
|
||||||
|
# Remove SSH and GPG keys from keystores
|
||||||
|
${pkgs.openssh}/bin/ssh-add -D
|
||||||
|
echo RELOADAGENT | ${pkgs.gnupg}/bin/gpg-connect-agent
|
||||||
|
${pkgs.coreutils}/bin/rm -rf "/tmp/cached_pass_$UID"
|
||||||
|
# TODO Should probably be an option and defined where relevant?
|
||||||
|
# TODO Maybe we could have a terminal lock? With vlock.
|
||||||
|
|
||||||
|
# TODO Does that work for all DMs?
|
||||||
|
# TODO Might want to use i3lock on NixOS configs still?
|
||||||
|
if ! ${pkgs.lightdm}/bin/dm-tool lock
|
||||||
|
then
|
||||||
|
if [ -d ${config.xdg.cacheHome}/lockpatterns ]
|
||||||
|
then
|
||||||
|
pattern=$(${pkgs.findutils} ${config.xdg.cacheHome}/lockpatterns | sort -R | head -1)
|
||||||
|
else
|
||||||
|
pattern=${lockPng}
|
||||||
|
fi
|
||||||
|
revert() {
|
||||||
|
${pkgs.xorg.xset}/bin/xset dpms 0 0 0
|
||||||
|
}
|
||||||
|
trap revert SIGHUP SIGINT SIGTERM
|
||||||
|
${pkgs.xorg.xset}/bin/xset dpms 5 5 5
|
||||||
|
${pkgs.i3lock}/bin/i3lock --nofork --color ${builtins.substring 1 6 lockColors.d} --image="$pattern" --tiling --ignore-empty-password
|
||||||
|
revert
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
xsession.windowManager.i3.config = {
|
||||||
|
keybindings = {
|
||||||
|
# Screen off commands
|
||||||
|
"${mod}+F1" = "exec --no-startup-id ${pkgs.bash}/bin/sh -c \"${pkgs.coreutils}/bin/sleep .25 && ${pkgs.xorg.xset}/bin/xset dpms force off\"";
|
||||||
|
# TODO --release?
|
||||||
|
"${mod}+F4" = "exec --no-startup-id ${pkgs.xautolock}/bin/xautolock -disable";
|
||||||
|
"${mod}+F5" = "exec --no-startup-id ${pkgs.xautolock}/bin/xautolock -enable";
|
||||||
|
};
|
||||||
|
startup = [
|
||||||
|
# Lock screen after 10 minutes
|
||||||
|
{ notification = false; command = "${pkgs.xautolock}/bin/xautolock -time 10 -locker '${pkgs.xorg.xset}/bin/xset dpms force standby' -killtime 1 -killer xlock"; }
|
||||||
|
# TODO There's a services.screen-locker.xautolock but not sure it can match the above command
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
27
hm/desktop/mpd/default.nix
Normal file
27
hm/desktop/mpd/default.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
{
|
||||||
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
ashuffle
|
||||||
|
mpc-cli
|
||||||
|
vimpc
|
||||||
|
];
|
||||||
|
services.mpd = {
|
||||||
|
enable = true;
|
||||||
|
network = {
|
||||||
|
listenAddress = "0.0.0.0"; # So it can be controlled from home
|
||||||
|
# TODO ... and whoever is the Wi-Fi network I'm using, which, not great
|
||||||
|
startWhenNeeded = true;
|
||||||
|
};
|
||||||
|
extraConfig = ''
|
||||||
|
restore_paused "yes"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
xsession.windowManager.i3.config.keybindings =
|
||||||
|
{
|
||||||
|
"XF86AudioPrev" = "exec ${pkgs.mpc-cli}/bin/mpc prev";
|
||||||
|
"XF86AudioPlay" = "exec ${pkgs.mpc-cli}/bin/mpc toggle";
|
||||||
|
"XF86AudioNext" = "exec ${pkgs.mpc-cli}/bin/mpc next";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
17
hm/desktop/screenshots/default.nix
Normal file
17
hm/desktop/screenshots/default.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
dir = config.xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR;
|
||||||
|
scrot = "${pkgs.scrot}/bin/scrot --exec '${pkgs.coreutils}/bin/mv $f ${dir}/ && ${pkgs.optipng}/bin/optipng ${dir}/$f'";
|
||||||
|
mod = config.xsession.windowManager.i3.config.modifier;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = lib.mkIf config.frogeye.desktop.xorg {
|
||||||
|
xdg.userDirs.extraConfig.XDG_SCREENSHOTS_DIR = "${config.home.homeDirectory}/Screenshots";
|
||||||
|
xsession.windowManager.i3.config.keybindings = {
|
||||||
|
"Print" = "exec ${scrot} --focused";
|
||||||
|
"${mod}+Print" = "exec ${scrot}";
|
||||||
|
"Ctrl+Print" = "exec ${pkgs.coreutils}/bin/sleep 1 && ${scrot} --select";
|
||||||
|
# TODO Try using bindsym --release instead of sleep
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -28,7 +28,7 @@
|
||||||
programs.bash.shellAliases = {
|
programs.bash.shellAliases = {
|
||||||
gdb = "gdb -x ${config.xdg.configHome}/gdbinit";
|
gdb = "gdb -x ${config.xdg.configHome}/gdbinit";
|
||||||
};
|
};
|
||||||
programs.nixvim.extraPlugins = [ pkgs.vimPlugins.nvim-dap ]; # Debug Adapter Protocol client
|
programs.nixvim.plugins.dap.enable = true; # Debug Adapter Protocol client
|
||||||
xdg.configFile = {
|
xdg.configFile = {
|
||||||
"ccache.conf" = {
|
"ccache.conf" = {
|
||||||
text = "ccache_dir = ${config.xdg.cacheHome}/ccache";
|
text = "ccache_dir = ${config.xdg.cacheHome}/ccache";
|
||||||
|
|
|
@ -51,5 +51,18 @@
|
||||||
yosys
|
yosys
|
||||||
gtkwave
|
gtkwave
|
||||||
];
|
];
|
||||||
|
|
||||||
|
programs.nixvim.plugins.lsp.servers = {
|
||||||
|
ansiblels.enable = config.frogeye.dev.ansible; # Ansible
|
||||||
|
bashls.enable = true; # Bash
|
||||||
|
jsonls.enable = true; # JSON
|
||||||
|
lua-ls.enable = true; # Lua (for Neovim debugging)
|
||||||
|
perlpls.enable = config.frogeye.dev.perl; # Perl
|
||||||
|
phpactor.enable = config.frogeye.dev.php; # PHP
|
||||||
|
rnix-lsp.enable = true; # Nix
|
||||||
|
# TODO Something for SQL. sqls is deprecated, sqlls is not in Nixpkgs. Probably needs a DB connection configured anyways?
|
||||||
|
yamlls.enable = true; # YAML
|
||||||
|
# TODO Check out none-ls
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
# TODO factorio
|
# TODO factorio
|
||||||
|
|
||||||
steam # Common pitfall: https://github.com/NixOS/nixpkgs/issues/86506#issuecomment-623746883
|
steam # Common pitfall: https://github.com/NixOS/nixpkgs/issues/86506#issuecomment-623746883
|
||||||
|
itch
|
||||||
];
|
];
|
||||||
sessionVariables = {
|
sessionVariables = {
|
||||||
BOOT9_PATH = "${config.xdg.dataHome}/citra-emu/sysdata/boot9.bin";
|
BOOT9_PATH = "${config.xdg.dataHome}/citra-emu/sysdata/boot9.bin";
|
||||||
|
|
19
hm/password/default.nix
Normal file
19
hm/password/default.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
mod = config.xsession.windowManager.i3.config.modifier;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pwgen
|
||||||
|
];
|
||||||
|
programs = {
|
||||||
|
bash.shellAliases = {
|
||||||
|
pw = ''${pkgs.pwgen}/bin/pwgen 32 -y''; # Generate passwords. ln((26*2+10)**32)/ln(2) ≅ 190 bits of entropy
|
||||||
|
};
|
||||||
|
password-store.enable = true;
|
||||||
|
};
|
||||||
|
xsession.windowManager.i3.config.keybindings."${mod}+c" = "exec --no-startup-id ${config.programs.rofi.pass.package}/bin/rofi-pass --last-used";
|
||||||
|
# TODO Try autopass.cr
|
||||||
|
};
|
||||||
|
}
|
72
hm/vim/code.nix
Normal file
72
hm/vim/code.nix
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
let
|
||||||
|
# UPST
|
||||||
|
vim-shot-f = pkgs.vimUtils.buildVimPlugin {
|
||||||
|
pname = "vim-shot-f";
|
||||||
|
version = "2016-02-05";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "deris";
|
||||||
|
repo = "vim-shot-f";
|
||||||
|
rev = "eea71d2a1038aa87fe175de9150b39dc155e5e7f";
|
||||||
|
sha256 = "iAPvIs/lhW+w5kFTZKaY97D/kfCGtqKrJVFvZ8cHu+c=";
|
||||||
|
};
|
||||||
|
meta.homepage = "https://github.com/deris/vim-shot-f";
|
||||||
|
};
|
||||||
|
quick-scope = pkgs.vimUtils.buildVimPlugin rec {
|
||||||
|
pname = "quick-scope";
|
||||||
|
version = "2.6.1";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "unblevable";
|
||||||
|
repo = "quick-scope";
|
||||||
|
rev = "v${version}";
|
||||||
|
sha256 = "TcA4jZIdnQd06V+JrXGiCMr0Yhm9gB6OMiTSdzMt/Qw=";
|
||||||
|
};
|
||||||
|
meta.homepage = "https://github.com/unblevable/quick-scope";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.nixvim = {
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
|
# f/F mode
|
||||||
|
vim-shot-f # Highlight relevant characters for f/F/t/T modes
|
||||||
|
quick-scope # Highlight relevant characters for f/F modes one per word but always
|
||||||
|
];
|
||||||
|
options = {
|
||||||
|
# From https://www.hillelwayne.com/post/intermediate-vim/
|
||||||
|
scrolloff = 10;
|
||||||
|
lazyredraw = true; # Do not redraw screen in the middle of a macro. Makes them complete faster.
|
||||||
|
cursorcolumn = true;
|
||||||
|
|
||||||
|
# From http://stackoverflow.com/a/5004785/2766106
|
||||||
|
list = true;
|
||||||
|
listchars = "tab:╾╌,trail:·,extends:↦,precedes:↤,nbsp:_";
|
||||||
|
showbreak = "↪";
|
||||||
|
};
|
||||||
|
plugins = {
|
||||||
|
# Catches attention when cursor changed position
|
||||||
|
specs = {
|
||||||
|
enable = true;
|
||||||
|
min_jump = 5;
|
||||||
|
fader = { builtin = "pulse_fader"; };
|
||||||
|
resizer = { builtin = "shrink_resizer"; };
|
||||||
|
};
|
||||||
|
|
||||||
|
# Treesitter
|
||||||
|
treesitter = {
|
||||||
|
# Allows for better syntax highlighting
|
||||||
|
enable = true;
|
||||||
|
incrementalSelection = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
# indent = true; # Not very working last time I tried apparently
|
||||||
|
};
|
||||||
|
# TODO Investigate https://github.com/nvim-treesitter/nvim-treesitter-textobjects
|
||||||
|
indent-blankline.enable = true; # Show indent guides
|
||||||
|
rainbow-delimiters.enable = true; # Randomly colore paired brackets
|
||||||
|
|
||||||
|
nvim-colorizer.enable = true; # Display colors of color-codes
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
49
hm/vim/decoration.nix
Normal file
49
hm/vim/decoration.nix
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.nixvim = {
|
||||||
|
autoCmd = [
|
||||||
|
# Turn off relativenumber only for insert mode
|
||||||
|
{ event = "InsertEnter"; pattern = "*"; command = "set norelativenumber"; }
|
||||||
|
{ event = "InsertLeave"; pattern = "*"; command = "set relativenumber"; }
|
||||||
|
];
|
||||||
|
extraConfigLua = builtins.readFile ./feline.lua;
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
|
nvim-scrollview # Scroll bar
|
||||||
|
# Status line
|
||||||
|
feline-nvim # Customizable status line.
|
||||||
|
# TODO Abandonned. Maybe use lualine?
|
||||||
|
];
|
||||||
|
keymaps = [
|
||||||
|
# barbar
|
||||||
|
{ key = "<C-H>"; action = "<Cmd>BufferPrevious<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-L>"; action = "<Cmd>BufferNext<CR>"; options = { silent = true; }; }
|
||||||
|
# TODO https://www.reddit.com/r/neovim/comments/mbj8m5/how_to_setup_ctrlshiftkey_mappings_in_neovim_and/
|
||||||
|
{ key = "<Space><C-H>"; action = "<Cmd>BufferMovePrevious<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<Space><C-L>"; action = "<Cmd>BufferMoveNext<CR>"; options = { silent = true; }; }
|
||||||
|
# TODO gotos don't work
|
||||||
|
{ key = "<C-1>"; action = "<Cmd>BufferGoto 1<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-2>"; action = "<Cmd>BufferGoto 2<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-3>"; action = "<Cmd>BufferGoto 3<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-4>"; action = "<Cmd>BufferGoto 4<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-5>"; action = "<Cmd>BufferGoto 5<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-6>"; action = "<Cmd>BufferGoto 6<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-7>"; action = "<Cmd>BufferGoto 7<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-8>"; action = "<Cmd>BufferGoto 8<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-9>"; action = "<Cmd>BufferGoto 9<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-0>"; action = "<Cmd>BufferLast<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "gb"; action = "<Cmd>BufferPick<CR>"; options = { silent = true; }; }
|
||||||
|
# TODO Other useful options?
|
||||||
|
];
|
||||||
|
options = {
|
||||||
|
title = true;
|
||||||
|
number = true;
|
||||||
|
relativenumber = true;
|
||||||
|
};
|
||||||
|
plugins = {
|
||||||
|
# Tabline
|
||||||
|
barbar.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,29 +1,4 @@
|
||||||
{ pkgs, lib, config, ... }:
|
{ pkgs, lib, config, ... }:
|
||||||
let
|
|
||||||
# UPST
|
|
||||||
vim-shot-f = pkgs.vimUtils.buildVimPlugin {
|
|
||||||
pname = "vim-shot-f";
|
|
||||||
version = "2016-02-05";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "deris";
|
|
||||||
repo = "vim-shot-f";
|
|
||||||
rev = "eea71d2a1038aa87fe175de9150b39dc155e5e7f";
|
|
||||||
sha256 = "iAPvIs/lhW+w5kFTZKaY97D/kfCGtqKrJVFvZ8cHu+c=";
|
|
||||||
};
|
|
||||||
meta.homepage = "https://github.com/deris/vim-shot-f";
|
|
||||||
};
|
|
||||||
quick-scope = pkgs.vimUtils.buildVimPlugin rec {
|
|
||||||
pname = "quick-scope";
|
|
||||||
version = "2.6.1";
|
|
||||||
src = pkgs.fetchFromGitHub {
|
|
||||||
owner = "unblevable";
|
|
||||||
repo = "quick-scope";
|
|
||||||
rev = "v${version}";
|
|
||||||
sha256 = "TcA4jZIdnQd06V+JrXGiCMr0Yhm9gB6OMiTSdzMt/Qw=";
|
|
||||||
};
|
|
||||||
meta.homepage = "https://github.com/unblevable/quick-scope";
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
# config = lib.mkIf config.programs.nixvim.enable { # Somehow this is infinite recursion?
|
# config = lib.mkIf config.programs.nixvim.enable { # Somehow this is infinite recursion?
|
||||||
config = {
|
config = {
|
||||||
|
@ -42,14 +17,6 @@ in
|
||||||
# polarity.
|
# polarity.
|
||||||
colorschemes.base16.colorscheme = "solarized-${config.frogeye.polarity}";
|
colorschemes.base16.colorscheme = "solarized-${config.frogeye.polarity}";
|
||||||
options = {
|
options = {
|
||||||
# From https://www.hillelwayne.com/post/intermediate-vim/
|
|
||||||
title = true;
|
|
||||||
number = true;
|
|
||||||
relativenumber = true;
|
|
||||||
scrolloff = 10;
|
|
||||||
lazyredraw = true; # Do not redraw screen in the middle of a macro. Makes them complete faster.
|
|
||||||
cursorcolumn = true;
|
|
||||||
|
|
||||||
ignorecase = true;
|
ignorecase = true;
|
||||||
smartcase = true;
|
smartcase = true;
|
||||||
gdefault = true;
|
gdefault = true;
|
||||||
|
@ -64,11 +31,6 @@ in
|
||||||
updatetime = 250;
|
updatetime = 250;
|
||||||
undofile = true;
|
undofile = true;
|
||||||
|
|
||||||
# From http://stackoverflow.com/a/5004785/2766106
|
|
||||||
list = true;
|
|
||||||
listchars = "tab:╾╌,trail:·,extends:↦,precedes:↤,nbsp:_";
|
|
||||||
showbreak = "↪";
|
|
||||||
|
|
||||||
wildmode = "longest:full,full";
|
wildmode = "longest:full,full";
|
||||||
wildmenu = true;
|
wildmenu = true;
|
||||||
};
|
};
|
||||||
|
@ -76,19 +38,6 @@ in
|
||||||
netrw_fastbrowse = 0; # Close the file explorer once you select a file
|
netrw_fastbrowse = 0; # Close the file explorer once you select a file
|
||||||
};
|
};
|
||||||
plugins = {
|
plugins = {
|
||||||
# Catches attention when cursor changed position
|
|
||||||
# TODO Unmapped, do I still want to use it?
|
|
||||||
specs = {
|
|
||||||
enable = true;
|
|
||||||
min_jump = 5;
|
|
||||||
fader = { builtin = "pulse_fader"; };
|
|
||||||
resizer = { builtin = "shrink_resizer"; };
|
|
||||||
};
|
|
||||||
|
|
||||||
# Tabline
|
|
||||||
barbar.enable = true;
|
|
||||||
|
|
||||||
|
|
||||||
# Go to whatever
|
# Go to whatever
|
||||||
telescope = {
|
telescope = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -136,84 +85,14 @@ in
|
||||||
# Surrounding pairs
|
# Surrounding pairs
|
||||||
surround.enable = true; # Change surrounding pairs (e.g. brackets, quotes)
|
surround.enable = true; # Change surrounding pairs (e.g. brackets, quotes)
|
||||||
|
|
||||||
# Language Server
|
|
||||||
lsp = {
|
|
||||||
enable = true;
|
|
||||||
keymaps = {
|
|
||||||
silent = true;
|
|
||||||
diagnostic = {
|
|
||||||
"<Space>e" = "open_float";
|
|
||||||
"[e" = "goto_prev";
|
|
||||||
"]e" = "goto_next";
|
|
||||||
};
|
|
||||||
lspBuf = {
|
|
||||||
"gD" = "declaration";
|
|
||||||
"K" = "hover";
|
|
||||||
"gi" = "implementation";
|
|
||||||
"<C-S-k>" = "signature_help";
|
|
||||||
"<space>wa" = "add_workspace_folder";
|
|
||||||
"<space>wr" = "remove_workspace_folder";
|
|
||||||
# "<space>wl" = "list_workspace_folder";
|
|
||||||
# TODO Full thing was function() print(vim.inspect(vim.lsp.buf.list_workspace_folder())) end but not sure I'm ever really using this
|
|
||||||
# Also makes nvim crash like this, so uncommented
|
|
||||||
"<space>D" = "type_definition";
|
|
||||||
"<space>rn" = "rename";
|
|
||||||
"<space>f" = "format";
|
|
||||||
# TODO Full thing was function() vim.lsp.buf.format { async = true } end, so async while this isn't
|
|
||||||
# Maybe replace this with lsp-format?
|
|
||||||
};
|
|
||||||
};
|
|
||||||
servers = {
|
|
||||||
ansiblels.enable = config.frogeye.dev.ansible; # Ansible
|
|
||||||
bashls.enable = true; # Bash
|
|
||||||
jsonls.enable = true; # JSON
|
|
||||||
lua-ls.enable = true; # Lua (for Neovim debugging)
|
|
||||||
perlpls.enable = config.frogeye.dev.perl; # Perl
|
|
||||||
phpactor.enable = config.frogeye.dev.php; # PHP
|
|
||||||
rnix-lsp.enable = true; # Nix
|
|
||||||
# TODO Something for SQL. sqls is deprecated, sqlls is not in Nixpkgs. Probably needs a DB connection configured anyways?
|
|
||||||
yamlls.enable = true; # YAML
|
|
||||||
# TODO Check out none-ls
|
|
||||||
};
|
|
||||||
};
|
|
||||||
nvim-lightbulb = {
|
|
||||||
# Shows a lightbulb whenever a codeAction is available under the cursor
|
|
||||||
enable = true;
|
|
||||||
autocmd.enabled = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Treesitter
|
|
||||||
treesitter = {
|
|
||||||
# Allows for better syntax highlighting
|
|
||||||
enable = true;
|
|
||||||
incrementalSelection = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
# indent = true; # Not very working last time I tried apparently
|
|
||||||
};
|
|
||||||
# TODO Investigate https://github.com/nvim-treesitter/nvim-treesitter-textobjects
|
|
||||||
|
|
||||||
rainbow-delimiters.enable = true; # Randomly colore paired brackets
|
|
||||||
|
|
||||||
indent-blankline.enable = true; # Show indent guides
|
|
||||||
|
|
||||||
undotree.enable = true; # Navigate edition history
|
undotree.enable = true; # Navigate edition history
|
||||||
|
|
||||||
# Git
|
# Git
|
||||||
fugitive.enable = true; # Git basics
|
fugitive.enable = true; # Git basics
|
||||||
gitsigns.enable = true; # Show changed lines in the gutter
|
gitsigns.enable = true; # Show changed lines in the gutter
|
||||||
|
|
||||||
# Language-specific
|
|
||||||
# dap.enable = true; # Debug Adapter Protocol client # 23.11
|
|
||||||
nvim-colorizer.enable = true; # Display colors of color-codes
|
|
||||||
};
|
};
|
||||||
extraPlugins = with pkgs.vimPlugins; [
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
nvim-scrollview # Scroll bar
|
|
||||||
|
|
||||||
# Status line
|
|
||||||
feline-nvim # Customizable status line.
|
|
||||||
# TODO Abandonned. Maybe use lualine?
|
|
||||||
|
|
||||||
# Search/replace
|
# Search/replace
|
||||||
vim-abolish # Regex for words, with case in mind
|
vim-abolish # Regex for words, with case in mind
|
||||||
vim-easy-align # Aligning lines around a certain character
|
vim-easy-align # Aligning lines around a certain character
|
||||||
|
@ -221,10 +100,6 @@ in
|
||||||
# Surrounding pairs
|
# Surrounding pairs
|
||||||
targets-vim # Better interaction with surrounding pairs
|
targets-vim # Better interaction with surrounding pairs
|
||||||
|
|
||||||
# f/F mode
|
|
||||||
vim-shot-f # Highlight relevant characters for f/F/t/T modes
|
|
||||||
quick-scope # Highlight relevant characters for f/F modes one per word but always
|
|
||||||
|
|
||||||
# Registers
|
# Registers
|
||||||
registers-nvim # Show register content when pressing "
|
registers-nvim # Show register content when pressing "
|
||||||
# TODO Doesn't work. Didn't work on Arch either
|
# TODO Doesn't work. Didn't work on Arch either
|
||||||
|
@ -234,9 +109,6 @@ in
|
||||||
symbols-outline-nvim # Show a symbol panel on the right
|
symbols-outline-nvim # Show a symbol panel on the right
|
||||||
# TODO Fails on startup. Same on Arch. Config issue?
|
# TODO Fails on startup. Same on Arch. Config issue?
|
||||||
|
|
||||||
# Language server
|
|
||||||
lsp_signature-nvim # Show argument definition when typing a function
|
|
||||||
|
|
||||||
# Git
|
# Git
|
||||||
fugitive-gitlab-vim # Open files in GitLab
|
fugitive-gitlab-vim # Open files in GitLab
|
||||||
# TODO Connect it!
|
# TODO Connect it!
|
||||||
|
@ -251,11 +123,7 @@ in
|
||||||
] ++ lib.optionals config.frogeye.dev.ansible [
|
] ++ lib.optionals config.frogeye.dev.ansible [
|
||||||
ansible-vim # TODO Doesn't have snippets
|
ansible-vim # TODO Doesn't have snippets
|
||||||
];
|
];
|
||||||
extraConfigLua = lib.strings.concatMapStringsSep "\n" (f: builtins.readFile f) [
|
extraConfigLua = builtins.readFile ./symbols-outline-nvim.lua;
|
||||||
./feline.lua
|
|
||||||
./symbols-outline-nvim.lua
|
|
||||||
./lsp_signature-nvim.lua
|
|
||||||
];
|
|
||||||
extraConfigVim = ''
|
extraConfigVim = ''
|
||||||
" GENERAL
|
" GENERAL
|
||||||
|
|
||||||
|
@ -281,10 +149,6 @@ in
|
||||||
|
|
||||||
'';
|
'';
|
||||||
autoCmd = [
|
autoCmd = [
|
||||||
# Turn off relativenumber only for insert mode
|
|
||||||
{ event = "InsertEnter"; pattern = "*"; command = "set norelativenumber"; }
|
|
||||||
{ event = "InsertLeave"; pattern = "*"; command = "set relativenumber"; }
|
|
||||||
|
|
||||||
# vim-easy-align: Align Markdown tables
|
# vim-easy-align: Align Markdown tables
|
||||||
{ event = "FileType"; pattern = "markdown"; command = "vmap <Bar> :EasyAlign*<Bar><Enter>"; }
|
{ event = "FileType"; pattern = "markdown"; command = "vmap <Bar> :EasyAlign*<Bar><Enter>"; }
|
||||||
];
|
];
|
||||||
|
@ -315,26 +179,6 @@ in
|
||||||
|
|
||||||
# PLUGINS
|
# PLUGINS
|
||||||
|
|
||||||
# barbar
|
|
||||||
{ key = "<C-H>"; action = "<Cmd>BufferPrevious<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-L>"; action = "<Cmd>BufferNext<CR>"; options = { silent = true; }; }
|
|
||||||
# TODO https://www.reddit.com/r/neovim/comments/mbj8m5/how_to_setup_ctrlshiftkey_mappings_in_neovim_and/
|
|
||||||
{ key = "<Space><C-H>"; action = "<Cmd>BufferMovePrevious<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<Space><C-L>"; action = "<Cmd>BufferMoveNext<CR>"; options = { silent = true; }; }
|
|
||||||
# TODO gotos don't work
|
|
||||||
{ key = "<C-1>"; action = "<Cmd>BufferGoto 1<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-2>"; action = "<Cmd>BufferGoto 2<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-3>"; action = "<Cmd>BufferGoto 3<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-4>"; action = "<Cmd>BufferGoto 4<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-5>"; action = "<Cmd>BufferGoto 5<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-6>"; action = "<Cmd>BufferGoto 6<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-7>"; action = "<Cmd>BufferGoto 7<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-8>"; action = "<Cmd>BufferGoto 8<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-9>"; action = "<Cmd>BufferGoto 9<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "<C-0>"; action = "<Cmd>BufferLast<CR>"; options = { silent = true; }; }
|
|
||||||
{ key = "gb"; action = "<Cmd>BufferPick<CR>"; options = { silent = true; }; }
|
|
||||||
# TODO Other useful options?
|
|
||||||
|
|
||||||
# symbols-outline-nvim
|
# symbols-outline-nvim
|
||||||
{ key = "<Space>s"; action = "<Cmd>SymbolsOutline<CR>"; options = { silent = true; }; }
|
{ key = "<Space>s"; action = "<Cmd>SymbolsOutline<CR>"; options = { silent = true; }; }
|
||||||
|
|
||||||
|
@ -346,6 +190,9 @@ in
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
./code.nix
|
||||||
./completion.nix
|
./completion.nix
|
||||||
|
./decoration.nix
|
||||||
|
./lsp.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
source ~/.config/vim/plug.vim
|
|
||||||
call plug#begin('~/.cache/nvim/plugged')
|
|
||||||
Plug 'RRethy/nvim-base16'
|
|
||||||
call plug#end()
|
|
||||||
|
|
||||||
colorscheme base16-solarized-dark
|
|
||||||
lua << EOF
|
|
||||||
a = require('base16-colorscheme').colors.base00
|
|
||||||
EOF
|
|
72
hm/vim/lsp.nix
Normal file
72
hm/vim/lsp.nix
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
{ pkgs, lib, config, ... }:
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.nixvim = {
|
||||||
|
extraConfigLua = ''
|
||||||
|
require'lsp_signature'.on_attach({
|
||||||
|
hint_enable = false,
|
||||||
|
})
|
||||||
|
'';
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
|
# Language server
|
||||||
|
lsp_signature-nvim # Show argument definition when typing a function
|
||||||
|
];
|
||||||
|
keymaps = [
|
||||||
|
# barbar
|
||||||
|
{ key = "<C-H>"; action = "<Cmd>BufferPrevious<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-L>"; action = "<Cmd>BufferNext<CR>"; options = { silent = true; }; }
|
||||||
|
# TODO https://www.reddit.com/r/neovim/comments/mbj8m5/how_to_setup_ctrlshiftkey_mappings_in_neovim_and/
|
||||||
|
{ key = "<Space><C-H>"; action = "<Cmd>BufferMovePrevious<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<Space><C-L>"; action = "<Cmd>BufferMoveNext<CR>"; options = { silent = true; }; }
|
||||||
|
# TODO gotos don't work
|
||||||
|
{ key = "<C-1>"; action = "<Cmd>BufferGoto 1<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-2>"; action = "<Cmd>BufferGoto 2<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-3>"; action = "<Cmd>BufferGoto 3<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-4>"; action = "<Cmd>BufferGoto 4<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-5>"; action = "<Cmd>BufferGoto 5<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-6>"; action = "<Cmd>BufferGoto 6<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-7>"; action = "<Cmd>BufferGoto 7<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-8>"; action = "<Cmd>BufferGoto 8<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-9>"; action = "<Cmd>BufferGoto 9<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "<C-0>"; action = "<Cmd>BufferLast<CR>"; options = { silent = true; }; }
|
||||||
|
{ key = "gb"; action = "<Cmd>BufferPick<CR>"; options = { silent = true; }; }
|
||||||
|
# TODO Other useful options?
|
||||||
|
];
|
||||||
|
plugins = {
|
||||||
|
# Language Server
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
keymaps = {
|
||||||
|
silent = true;
|
||||||
|
diagnostic = {
|
||||||
|
"<Space>e" = "open_float";
|
||||||
|
"[e" = "goto_prev";
|
||||||
|
"]e" = "goto_next";
|
||||||
|
};
|
||||||
|
lspBuf = {
|
||||||
|
"gD" = "declaration";
|
||||||
|
"K" = "hover";
|
||||||
|
"gi" = "implementation";
|
||||||
|
"<C-S-k>" = "signature_help";
|
||||||
|
"<space>wa" = "add_workspace_folder";
|
||||||
|
"<space>wr" = "remove_workspace_folder";
|
||||||
|
# "<space>wl" = "list_workspace_folder";
|
||||||
|
# TODO Full thing was function() print(vim.inspect(vim.lsp.buf.list_workspace_folder())) end but not sure I'm ever really using this
|
||||||
|
# Also makes nvim crash like this, so uncommented
|
||||||
|
"<space>D" = "type_definition";
|
||||||
|
"<space>rn" = "rename";
|
||||||
|
"<space>f" = "format";
|
||||||
|
# TODO Full thing was function() vim.lsp.buf.format { async = true } end, so async while this isn't
|
||||||
|
# Maybe replace this with lsp-format?
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
nvim-lightbulb = {
|
||||||
|
# Shows a lightbulb whenever a codeAction is available under the cursor
|
||||||
|
enable = true;
|
||||||
|
autocmd.enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,3 +0,0 @@
|
||||||
require'lsp_signature'.on_attach({
|
|
||||||
hint_enable = false,
|
|
||||||
})
|
|
|
@ -39,6 +39,7 @@
|
||||||
hardware = {
|
hardware = {
|
||||||
bluetooth.enable = true;
|
bluetooth.enable = true;
|
||||||
pulseaudio.enable = true;
|
pulseaudio.enable = true;
|
||||||
|
# TODO Try pipewire
|
||||||
};
|
};
|
||||||
|
|
||||||
# UPST
|
# UPST
|
||||||
|
|
Loading…
Reference in a new issue