neovim lspconfig

This commit is contained in:
Tristan 2023-12-23 15:43:26 +00:00
parent fb5c04a84a
commit 34aaaf63d2
29 changed files with 1705 additions and 1399 deletions

View file

@ -1,79 +1,120 @@
{ lib, stdenv, fetchurl, wrapGAppsHook, makeWrapper {
, dpkg lib,
, alsa-lib stdenv,
, at-spi2-atk fetchurl,
, at-spi2-core wrapGAppsHook,
, atk makeWrapper,
, cairo dpkg,
, cups alsa-lib,
, dbus at-spi2-atk,
, expat at-spi2-core,
, fontconfig atk,
, freetype cairo,
, gdk-pixbuf cups,
, glib dbus,
, gnome expat,
, gsettings-desktop-schemas fontconfig,
, gtk3 freetype,
, libuuid gdk-pixbuf,
, libdrm glib,
, libX11 gnome,
, libXcomposite gsettings-desktop-schemas,
, libXcursor gtk3,
, libXdamage libuuid,
, libXext libdrm,
, libXfixes libX11,
, libXi libXcomposite,
, libxkbcommon libXcursor,
, libXrandr libXdamage,
, libXrender libXext,
, libXScrnSaver libXfixes,
, libxshmfence libXi,
, libXtst libxkbcommon,
, mesa libXrandr,
, nspr libXrender,
, nss libXScrnSaver,
, pango libxshmfence,
, pipewire libXtst,
, udev mesa,
, wayland nspr,
, xorg nss,
, zlib pango,
, xdg-utils pipewire,
, snappy udev,
wayland,
xorg,
zlib,
xdg-utils,
snappy,
# command line arguments which are always set e.g "--disable-gpu" # command line arguments which are always set e.g "--disable-gpu"
, commandLineArgs ? "" commandLineArgs ? "",
# Necessary for USB audio devices. # Necessary for USB audio devices.
, pulseSupport ? stdenv.isLinux pulseSupport ? stdenv.isLinux,
, libpulseaudio libpulseaudio,
# For GPU acceleration support on Wayland (without the lib it doesn't seem to work) # For GPU acceleration support on Wayland (without the lib it doesn't seem to work)
, libGL libGL,
# For video acceleration via VA-API (--enable-features=VaapiVideoDecoder,VaapiVideoEncoder) # For video acceleration via VA-API (--enable-features=VaapiVideoDecoder,VaapiVideoEncoder)
, libvaSupport ? stdenv.isLinux libvaSupport ? stdenv.isLinux,
, libva libva,
, enableVideoAcceleration ? libvaSupport enableVideoAcceleration ? libvaSupport,
# For Vulkan support (--enable-features=Vulkan); disabled by default as it seems to break VA-API # For Vulkan support (--enable-features=Vulkan); disabled by default as it seems to break VA-API
, vulkanSupport ? false vulkanSupport ? false,
, addOpenGLRunpath addOpenGLRunpath,
, enableVulkan ? vulkanSupport enableVulkan ? vulkanSupport,
}: }: let
inherit
(lib)
optional
optionals
makeLibraryPath
makeSearchPathOutput
makeBinPath
optionalString
strings
escapeShellArg
;
let deps =
inherit (lib) optional optionals makeLibraryPath makeSearchPathOutput makeBinPath [
optionalString strings escapeShellArg; alsa-lib
at-spi2-atk
deps = [ at-spi2-core
alsa-lib at-spi2-atk at-spi2-core atk cairo cups dbus expat atk
fontconfig freetype gdk-pixbuf glib gtk3 libdrm libX11 libGL cairo
libxkbcommon libXScrnSaver libXcomposite libXcursor libXdamage cups
libXext libXfixes libXi libXrandr libXrender libxshmfence dbus
libXtst libuuid mesa nspr nss pango pipewire udev wayland expat
xorg.libxcb zlib snappy fontconfig
freetype
gdk-pixbuf
glib
gtk3
libdrm
libX11
libGL
libxkbcommon
libXScrnSaver
libXcomposite
libXcursor
libXdamage
libXext
libXfixes
libXi
libXrandr
libXrender
libxshmfence
libXtst
libuuid
mesa
nspr
nss
pango
pipewire
udev
wayland
xorg.libxcb
zlib
snappy
] ]
++ optional pulseSupport libpulseaudio ++ optional pulseSupport libpulseaudio
++ optional libvaSupport libva; ++ optional libvaSupport libva;
@ -81,14 +122,14 @@ let
rpath = makeLibraryPath deps + ":" + makeSearchPathOutput "lib" "lib64" deps; rpath = makeLibraryPath deps + ":" + makeSearchPathOutput "lib" "lib64" deps;
binpath = makeBinPath deps; binpath = makeBinPath deps;
enableFeatures = optionals enableVideoAcceleration [ "VaapiVideoDecoder" "VaapiVideoEncoder" ] enableFeatures =
optionals enableVideoAcceleration ["VaapiVideoDecoder" "VaapiVideoEncoder"]
++ optional enableVulkan "Vulkan"; ++ optional enableVulkan "Vulkan";
# The feature disable is needed for VAAPI to work correctly: https://github.com/brave/brave-browser/issues/20935 # The feature disable is needed for VAAPI to work correctly: https://github.com/brave/brave-browser/issues/20935
disableFeatures = optional enableVideoAcceleration "UseChromeOSDirectVideoDecoder"; disableFeatures = optional enableVideoAcceleration "UseChromeOSDirectVideoDecoder";
braveChannel = "nightly"; braveChannel = "nightly";
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "brave-${braveChannel}"; pname = "brave-${braveChannel}";
version = "1.52.54"; version = "1.52.54";
@ -110,7 +151,9 @@ stdenv.mkDerivation rec {
buildInputs = [ buildInputs = [
# needed for GSETTINGS_SCHEMAS_PATH # needed for GSETTINGS_SCHEMAS_PATH
glib gsettings-desktop-schemas gtk3 glib
gsettings-desktop-schemas
gtk3
# needed for XDG_ICON_DIRS # needed for XDG_ICON_DIRS
gnome.adwaita-icon-theme gnome.adwaita-icon-theme

View file

@ -1,10 +1,10 @@
{ lib {
, stdenv lib,
, buildGoModule stdenv,
, fetchFromGitHub buildGoModule,
, installShellFiles fetchFromGitHub,
installShellFiles,
}: }:
buildGoModule rec { buildGoModule rec {
pname = "lf"; pname = "lf";
version = "28-1"; version = "28-1";

View file

@ -13,16 +13,20 @@
stylix.url = "github:danth/stylix"; stylix.url = "github:danth/stylix";
}; };
outputs = { nixpkgs, home-manager, hyprland, stylix, ... } @inputs : outputs = {
let nixpkgs,
home-manager,
hyprland,
stylix,
...
} @ inputs: let
system = "x86_64-linux"; system = "x86_64-linux";
lib = nixpkgs.lib; lib = nixpkgs.lib;
mkConf = import ./lib/mkconf.nix; mkConf = import ./lib/mkconf.nix;
user = "tristan"; user = "tristan";
userName = "Tristan Beedell"; userName = "Tristan Beedell";
in in {
{
nixosConfigurations = { nixosConfigurations = {
zenix = mkConf "zenix" { zenix = mkConf "zenix" {
inherit inputs nixpkgs system user userName home-manager; inherit inputs nixpkgs system user userName home-manager;

View file

@ -1,4 +1,10 @@
{ config, pkgs, name, lib, ... }: {
config,
pkgs,
name,
lib,
...
}:
# https://nix-community.github.io/home-manager/options.html # https://nix-community.github.io/home-manager/options.html
let let
my-deps = { my-deps = {
@ -22,8 +28,7 @@ let
ffmpegthumbnailer = "${pkgs.ffmpegthumbnailer}/bin/ffmpegthumbnailer"; ffmpegthumbnailer = "${pkgs.ffmpegthumbnailer}/bin/ffmpegthumbnailer";
}; };
lf-sixel = pkgs.callPackage ../custom/lf-sixel/. {}; lf-sixel = pkgs.callPackage ../custom/lf-sixel/. {};
in in {
{
programs.home-manager.enable = true; programs.home-manager.enable = true;
home.username = "tristan"; home.username = "tristan";
@ -31,7 +36,7 @@ in
xdg.userDirs.enable = true; xdg.userDirs.enable = true;
home.packages = (with pkgs; [ home.packages = with pkgs; [
libnotify libnotify
dig dig
jq jq
@ -66,7 +71,7 @@ in
desktopName = "Logseq"; desktopName = "Logseq";
exec = "${logseq}/bin/logseq --ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --disable-gpu"; exec = "${logseq}/bin/logseq --ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --disable-gpu";
}) })
]); ];
programs.fish = { programs.fish = {
enable = true; enable = true;
@ -334,6 +339,4 @@ in
pdf-engine = "xelatex"; pdf-engine = "xelatex";
}; };
}; };
} }

View file

@ -1,8 +1,10 @@
# https://search.nixos.org/options # https://search.nixos.org/options
user: {
user: { config, pkgs, lib, ... }: config,
{ pkgs,
lib,
...
}: {
home-manager.users.${user}.imports = [ home-manager.users.${user}.imports = [
./home.nix ./home.nix
]; ];
@ -15,7 +17,6 @@ user: { config, pkgs, lib, ... }:
"electron-25.9.0" "electron-25.9.0"
]; ];
nix.settings.trusted-users = ["root" user]; nix.settings.trusted-users = ["root" user];
boot.loader.systemd-boot.enable = true; boot.loader.systemd-boot.enable = true;
@ -48,11 +49,26 @@ user: { config, pkgs, lib, ... }:
networking.firewall.allowedTCPPorts = [4713]; networking.firewall.allowedTCPPorts = [4713];
# kde connect # kde connect
networking.firewall.allowedTCPPortRanges = [{ from = 1714; to = 1764; }]; networking.firewall.allowedTCPPortRanges = [
networking.firewall.allowedUDPPortRanges = [{ from = 1714; to = 1764; }]; {
from = 1714;
to = 1764;
}
];
networking.firewall.allowedUDPPortRanges = [
{
from = 1714;
to = 1764;
}
];
networking.firewall.interfaces.tailscale0 = { networking.firewall.interfaces.tailscale0 = {
allowedTCPPortRanges = [{ from = 0; to = 65535; }]; allowedTCPPortRanges = [
{
from = 0;
to = 65535;
}
];
}; };
services.avahi.enable = true; services.avahi.enable = true;
@ -119,30 +135,6 @@ user: { config, pkgs, lib, ... }:
trash-cli trash-cli
wget wget
unzip unzip
(neovim.override {
vimAlias = true;
configure = {
packages.myPlugins = with pkgs.vimPlugins; {
start = [ vim-surround vim-commentary vim-nix ];
opt = [ ];
};
customRC = ''
vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR>
vnoremap <C-R> "ry:%s/<C-R>=escape(@r,'/\')<CR>
vnoremap A :norm A
set number
set rnu
set ignorecase
set smartcase
set mouse=a
set path=.,**
let g:netrw_banner=0
let g:netrw_liststyle=3
set undofile
set undodir=~/.local/share/nvim/undo
'';
};
})
]; ];
services.dbus.enable = true; services.dbus.enable = true;
@ -184,6 +176,4 @@ user: { config, pkgs, lib, ... }:
services.blueman.enable = true; services.blueman.enable = true;
services.prometheus.exporters.node.enable = true; services.prometheus.exporters.node.enable = true;
} }

View file

@ -1,20 +1,26 @@
{ config, ... }: {config, ...}: {
{
displays = { displays = {
enable = true; enable = true;
displays = [ displays = [
{ {
name = "DP-1"; name = "DP-1";
description = "HP Inc. HP 24x 1CR9500W9Q"; description = "HP Inc. HP 24x 1CR9500W9Q";
resolution = { x = 1920; y = 1080; freq = 144; }; resolution = {
x = 1920;
y = 1080;
freq = 144;
};
position.x = 0; position.x = 0;
position.y = 0; position.y = 0;
wallpaper = "/home/tristan/Pictures/backgrounds/demonslayer.jpg"; wallpaper = "/home/tristan/Pictures/backgrounds/demonslayer.jpg";
} }
{ {
name = "HDMI-A-1"; name = "HDMI-A-1";
resolution = { x = 1920; y = 1080; freq = 60; }; resolution = {
x = 1920;
y = 1080;
freq = 60;
};
position = { position = {
x = 1920; x = 1920;
y = 0; y = 0;

View file

@ -1,8 +1,11 @@
{user}: { config, lib, pkgs, modulesPath, ... }: {user}: {
config,
{ lib,
imports = pkgs,
[ modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
./displays.nix ./displays.nix
]; ];
@ -12,8 +15,7 @@
boot.kernelModules = ["kvm-intel"]; boot.kernelModules = ["kvm-intel"];
boot.extraModulePackages = []; boot.extraModulePackages = [];
fileSystems."/" = fileSystems."/" = {
{
device = "/dev/disk/by-uuid/48a07e82-1090-448c-a751-3a410afba0f7"; device = "/dev/disk/by-uuid/48a07e82-1090-448c-a751-3a410afba0f7";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@" "compress=zstd" "autodefrag"]; options = ["subvol=@" "compress=zstd" "autodefrag"];
@ -40,22 +42,19 @@
preLVM = false; preLVM = false;
}; };
fileSystems."/home" = fileSystems."/home" = {
{
device = "/dev/disk/by-uuid/48a07e82-1090-448c-a751-3a410afba0f7"; device = "/dev/disk/by-uuid/48a07e82-1090-448c-a751-3a410afba0f7";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@home" "compress=zstd" "autodefrag"]; options = ["subvol=@home" "compress=zstd" "autodefrag"];
}; };
fileSystems."/swap" = fileSystems."/swap" = {
{
device = "/dev/disk/by-uuid/48a07e82-1090-448c-a751-3a410afba0f7"; device = "/dev/disk/by-uuid/48a07e82-1090-448c-a751-3a410afba0f7";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@swap"]; options = ["subvol=@swap"];
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{
device = "/dev/disk/by-uuid/EED9-A165"; device = "/dev/disk/by-uuid/EED9-A165";
fsType = "vfat"; fsType = "vfat";
}; };
@ -89,12 +88,13 @@
networking.hostName = "FCS-Tristan-Nixbook"; networking.hostName = "FCS-Tristan-Nixbook";
system.stateVersion = "22.11"; # do not change system.stateVersion = "22.11"; # do not change
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
home.stateVersion = "22.05"; home.stateVersion = "22.05";
programs.waybar.settings.mainBar."hyprland/workspaces".persistent_workspaces = { programs.waybar.settings.mainBar."hyprland/workspaces".persistent_workspaces = {
eDP-1 = 5; eDP-1 = 5;
}; };
}]; }
];
} }

View file

@ -1,8 +1,11 @@
{user}: { config, lib, pkgs, modulesPath, ... }: {user}: {
config,
{ lib,
imports = pkgs,
[ modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
./displays.nix ./displays.nix
]; ];
@ -12,8 +15,7 @@
boot.kernelModules = ["kvm-amd"]; boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = []; boot.extraModulePackages = [];
fileSystems."/" = fileSystems."/" = {
{
device = "/dev/disk/by-uuid/2dad5ed6-44cc-4d9d-9392-32afaa7b3909"; device = "/dev/disk/by-uuid/2dad5ed6-44cc-4d9d-9392-32afaa7b3909";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@" "compress=zstd" "autodefrag"]; options = ["subvol=@" "compress=zstd" "autodefrag"];
@ -43,21 +45,18 @@
preLVM = false; preLVM = false;
}; };
fileSystems."/home" = fileSystems."/home" = {
{
device = "/dev/disk/by-uuid/2dad5ed6-44cc-4d9d-9392-32afaa7b3909"; device = "/dev/disk/by-uuid/2dad5ed6-44cc-4d9d-9392-32afaa7b3909";
fsType = "btrfs"; fsType = "btrfs";
options = ["subvol=@home" "compress=zstd" "autodefrag"]; options = ["subvol=@home" "compress=zstd" "autodefrag"];
}; };
fileSystems."/boot" = fileSystems."/boot" = {
{
device = "/dev/disk/by-uuid/FE7E-0DE3"; device = "/dev/disk/by-uuid/FE7E-0DE3";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = swapDevices = [{device = "/dev/disk/by-uuid/da57b489-ab77-4830-b710-9f96cf43d053";}];
[{ device = "/dev/disk/by-uuid/da57b489-ab77-4830-b710-9f96cf43d053"; }];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's
@ -85,7 +84,8 @@
}; };
}; };
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
home.stateVersion = "22.05"; home.stateVersion = "22.05";
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
@ -101,7 +101,6 @@
programs.waybar.settings.mainBar."hyprland/workspaces".persistent_workspaces = { programs.waybar.settings.mainBar."hyprland/workspaces".persistent_workspaces = {
DP-1 = 5; DP-1 = 5;
}; };
}
}]; ];
} }

View file

@ -1,12 +1,15 @@
{ user
, name
, work ? false
, displays ? [ ]
, userName
, ...
}:
{ config, pkgs, ... }:
{ {
user,
name,
work ? false,
displays ? [],
userName,
...
}: {
config,
pkgs,
...
}: {
imports = [ imports = [
(import ./modules/terminal.nix {inherit user;}) (import ./modules/terminal.nix {inherit user;})
(import ./modules/scripts.nix {inherit user;}) (import ./modules/scripts.nix {inherit user;})
@ -35,5 +38,4 @@
roles.personal.enable = !work; roles.personal.enable = !work;
roles.mpd.enable = true; roles.mpd.enable = true;
programs.editor.neovim = true; programs.editor.neovim = true;
} }

View file

@ -1,5 +1,10 @@
name: { pkgs, app-id, browser, desktopName, ... }: name: {
pkgs,
app-id,
browser,
desktopName,
...
}:
pkgs.makeDesktopItem { pkgs.makeDesktopItem {
name = "${name}"; name = "${name}";
desktopName = "${desktopName}"; desktopName = "${desktopName}";

View file

@ -1,23 +1,25 @@
name: name: {
{ nixpkgs nixpkgs,
, inputs inputs,
, home-manager home-manager,
, system system,
, user user,
, laptop ? false laptop ? false,
, work ? false work ? false,
, userName userName,
, ... ...
}: }:
nixpkgs.lib.nixosSystem rec { nixpkgs.lib.nixosSystem rec {
specialArgs = {inherit inputs;}; specialArgs = {inherit inputs;};
inherit system; inherit system;
modules = [ modules = [
({
({ inputs, pkgs, ... }: { inputs,
pkgs,
...
}: {
programs.hyprland = { programs.hyprland = {
enable = true; enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland; package = inputs.hyprland.packages.${pkgs.system}.hyprland;

View file

@ -1,9 +1,12 @@
{ user, ... }: { lib, pkgs, config, ... }: {user, ...}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
cfg = config.roles.dev; cfg = config.roles.dev;
in in {
{
options.roles = { options.roles = {
dev = { dev = {
enable = mkEnableOption "editor"; enable = mkEnableOption "editor";
@ -14,14 +17,16 @@ in
programs.editor.enable = true; programs.editor.enable = true;
roles.git.enable = true; roles.git.enable = true;
programs.terminal.enable = true; programs.terminal.enable = true;
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
home.packages = (with pkgs; [ {
home.packages = with pkgs; [
insomnia insomnia
dbeaver dbeaver
ansible ansible
tig tig
fx fx
]); ];
}]; }
];
}; };
} }

View file

@ -1,24 +1,34 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
cfg = config.displays; cfg = config.displays;
renderDisplaysForHyprland = displays: (map displayHyprlandSetting displays); renderDisplaysForHyprland = displays: (map displayHyprlandSetting displays);
displayHyprlandSetting = display: specificDisplay display + displayHyprlandSetting = display:
", " + resToString display.resolution + specificDisplay display
", " + positionToHyprlandString display.position + + ", "
", " + toString display.scaling + + resToString display.resolution
", " + "transform," + toString display.rotation; + ", "
+ positionToHyprlandString display.position
+ ", "
+ toString display.scaling
+ ", "
+ "transform,"
+ toString display.rotation;
swaybgJob = displays: swaybgJob = displays: {
{
Unit = { Unit = {
Description = "SwayBG"; Description = "SwayBG";
}; };
Service = { Service = {
ExecStart = "${pkgs.swaybg}/bin/swaybg " + ExecStart =
concatStringsSep " " (map swaybgCmd displays); "${pkgs.swaybg}/bin/swaybg "
+ concatStringsSep " " (map swaybgCmd displays);
}; };
Install = { Install = {
WantedBy = ["graphical-session.target"]; WantedBy = ["graphical-session.target"];
@ -26,32 +36,45 @@ let
}; };
swaybgCmd = display: swaybgCmd = display:
if (display.wallpaper != "") then "-o ${display.name} -i ${display.wallpaper} -m fill" else ""; if (display.wallpaper != "")
then "-o ${display.name} -i ${display.wallpaper} -m fill"
else "";
specificDisplay = display: specificDisplay = display:
if display.description == "" if display.description == ""
then display.name then display.name
else "desc:" + display.description; else "desc:" + display.description;
positionToHyprlandString = { x, y }: positionToHyprlandString = {
if (x == -1 || y == -1) then "auto" else toString x + "x" + toString y; x,
y,
}:
if (x == -1 || y == -1)
then "auto"
else toString x + "x" + toString y;
renderDisplaysForSway = displays: renderDisplaysForSway = displays:
listToAttrs (map displaySwaySetting displays); listToAttrs (map displaySwaySetting displays);
displaySwaySetting = display: { displaySwaySetting = display: {
name = display.name; name = display.name;
value = let res = display.resolution; in value = let
{ res = display.resolution;
mode = mkIf (!resUnset res) in {
mode =
mkIf (!resUnset res)
"${toString res.x}x${toString res.y}@${toString res.freq}Hz"; "${toString res.x}x${toString res.y}@${toString res.freq}Hz";
bg = display.wallpaper + " fill"; bg = display.wallpaper + " fill";
scale = toString display.scaling; scale = toString display.scaling;
}; };
}; };
resolutionType = types.submodule ({ x, y, freq, ... }: resolutionType = types.submodule ({
{ x,
y,
freq,
...
}: {
options = { options = {
x = mkOption { x = mkOption {
description = "x"; description = "x";
@ -70,7 +93,8 @@ let
}; };
}; };
}); });
displayType = types.submodule displayType =
types.submodule
({...}: { ({...}: {
options = { options = {
name = mkOption { name = mkOption {
@ -108,18 +132,14 @@ let
}; };
}); });
resUnset = res: resUnset = res: (res.x == 0 || res.y == 0 || res.freq == 0);
(res.x == 0 || res.y == 0 || res.freq == 0);
resToString = res: resToString = res:
if resUnset res if resUnset res
then "preferred" then "preferred"
else "${toString res.x}x${toString res.y}@${toString res.freq}"; else "${toString res.x}x${toString res.y}@${toString res.freq}";
in {
in options.displays = {
{
options.displays =
{
enable = mkEnableOption "manage displays"; enable = mkEnableOption "manage displays";
displays = mkOption { displays = mkOption {
type = types.listOf displayType; type = types.listOf displayType;
@ -130,14 +150,15 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${user}.imports = [ home-manager.users.${user}.imports = [
{ {
wayland.windowManager.hyprland.settings.monitor = mkIf (cfg.displays != [ ]) wayland.windowManager.hyprland.settings.monitor =
mkIf (cfg.displays != [])
(renderDisplaysForHyprland cfg.displays); (renderDisplaysForHyprland cfg.displays);
systemd.user.services.swaybg = swaybgJob cfg.displays; systemd.user.services.swaybg = swaybgJob cfg.displays;
wayland.windowManager.sway.config.output = mkIf (cfg.displays != [ ]) wayland.windowManager.sway.config.output =
mkIf (cfg.displays != [])
(renderDisplaysForSway cfg.displays); (renderDisplaysForSway cfg.displays);
} }
]; ];
}; };
} }

View file

@ -1,13 +1,16 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
editor = config.programs.editor; editor = config.programs.editor;
pkg = editor.package; pkg = editor.package;
terminal = config.programs.terminal.package; terminal = config.programs.terminal.package;
termcmd = "${terminal}/bin/${terminal.pname}"; termcmd = "${terminal}/bin/${terminal.pname}";
menu = config.programs.menu.package + config.programs.menu.dmenuCommand; menu = config.programs.menu.package + config.programs.menu.dmenuCommand;
in in {
{
options.programs = { options.programs = {
editor = { editor = {
enable = mkEnableOption "editor"; enable = mkEnableOption "editor";
@ -19,77 +22,78 @@ in
}; };
config = mkIf editor.enable { config = mkIf editor.enable {
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
programs.vscode = { programs.vscode = {
enable = true; enable = true;
package = editor.package; package = editor.package;
extensions = extensions =
if editor.neovim then with pkgs; [ if editor.neovim
then
with pkgs; [
vscode-extensions.asvetliakov.vscode-neovim vscode-extensions.asvetliakov.vscode-neovim
] else [ ]; ]
userSettings = { else [];
userSettings =
{
"keyboard.dispatch" = "keyCode"; "keyboard.dispatch" = "keyCode";
"terminal.integrated.sendKeybindingsToShell" = true; "terminal.integrated.sendKeybindingsToShell" = true;
"aws.telemetry" = false; "aws.telemetry" = false;
"gitlens.telemetry.enabled" = false; "gitlens.telemetry.enabled" = false;
"redhat.telemetry.enabled" = false; "redhat.telemetry.enabled" = false;
"cSpell.language" = "en,en-GB"; "cSpell.language" = "en,en-GB";
} // (if editor.neovim then { }
// (
if editor.neovim
then {
"vscode-neovim.neovimExecutablePaths.linux" = "${pkgs.neovim}/bin/nvim"; "vscode-neovim.neovimExecutablePaths.linux" = "${pkgs.neovim}/bin/nvim";
"extensions.experimental.affinity" = { "extensions.experimental.affinity" = {
"asvetliakov.vscode-neovim" = 1; "asvetliakov.vscode-neovim" = 1;
}; };
} else { }); }
else {}
);
}; };
programs.neovim = mkIf editor.neovim { programs.neovim = mkIf editor.neovim {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;
coc = { extraLuaConfig = ''
enable = true; ${builtins.readFile ./neovim/config.lua}
settings = {
languageserver = {
go = {
command = "${pkgs.gopls}/bin/gopls";
filetypes = [ "go" ];
};
nix = {
command = "${pkgs.rnix-lsp}/bin/rnix-lsp";
filetypes = [ "nix" ];
};
typescript = {
command = "${pkgs.nodePackages.typescript-language-server}/bin/typescript-language-server";
filetypes = [ "ts" "tsx" ];
};
};
};
};
extraConfig = ''
vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR>
vnoremap <C-R> "ry:%s/<C-R>=escape(@r,'/\')<CR>
vnoremap A :norm A
noremap <C-S-I> :CocCommand editor.action.formatDocument<CR>
set number
set rnu
set ignorecase
set smartcase
set mouse=a
set path=.,**
let g:netrw_banner=0
let g:netrw_liststyle=3
set undofile
set undodir=~/.local/share/nvim/undo
''; '';
extraPackages = with pkgs; [
nodePackages_latest.typescript-language-server
vscode-langservers-extracted
gopls
nil
];
plugins = with pkgs.vimPlugins; [ plugins = with pkgs.vimPlugins; [
vim-surround vim-surround
vim-commentary vim-commentary
{
plugin = telescope-nvim;
type = "lua";
config = ''
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
'';
}
{
plugin = nvim-lspconfig;
type = "lua";
config = builtins.readFile ./neovim/lspconfig.lua;
}
firenvim firenvim
]; ];
}; };
}
];
}]; programs.scripts = [
{
programs.scripts = [{
name = "open-code"; name = "open-code";
text = '' text = ''
code_dir=~/Documents/code code_dir=~/Documents/code
@ -104,7 +108,7 @@ in
''; '';
install = false; install = false;
hotkeys = [{key = "C";}]; hotkeys = [{key = "C";}];
}]; }
}; ];
};
} }

View file

@ -1,11 +1,17 @@
{ user, userName }: { lib, pkgs, config, ... }: {
with lib; user,
let userName,
}: {
lib,
pkgs,
config,
...
}:
with lib; let
cfg = config.roles.email; cfg = config.roles.email;
terminal = config.programs.terminal.package; terminal = config.programs.terminal.package;
termcmd = "${terminal}/bin/${terminal.pname}"; termcmd = "${terminal}/bin/${terminal.pname}";
in in {
{
options.roles = { options.roles = {
email = { email = {
enable = mkEnableOption "email settings"; enable = mkEnableOption "email settings";
@ -20,7 +26,6 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
programs.scripts = [ programs.scripts = [
{ {
name = "email"; name = "email";
@ -32,7 +37,8 @@ in
} }
]; ];
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
programs.git = { programs.git = {
userName = userName; userName = userName;
userEmail = cfg.email; userEmail = cfg.email;
@ -224,7 +230,7 @@ in
}; };
}; };
}; };
}]; }
}; ];
};
} }

View file

@ -1,6 +1,10 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
{ pkgs,
config,
...
}:
with lib; {
options.roles.gamer = { options.roles.gamer = {
enable = mkEnableOption "gamer packages"; enable = mkEnableOption "gamer packages";
}; };
@ -11,7 +15,8 @@ with lib;
"electron-25.9.0" "electron-25.9.0"
]; ];
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
home.packages = with pkgs; [ home.packages = with pkgs; [
airshipper airshipper
minetest minetest
@ -36,9 +41,11 @@ with lib;
}) })
oversteer oversteer
]; ];
}]; }
];
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
"steam" "steam"
"steam-run" "steam-run"
"steam-original" "steam-original"
@ -67,6 +74,5 @@ with lib;
ATTR{idVendor}=="046d", ATTR{idProduct}=="c261", RUN+="${pkgs.usb-modeswitch}/bin/usb_modeswitch -c '/etc/usb_modeswitch.d/046d:c261'" ATTR{idVendor}=="046d", ATTR{idProduct}=="c261", RUN+="${pkgs.usb-modeswitch}/bin/usb_modeswitch -c '/etc/usb_modeswitch.d/046d:c261'"
''; '';
hardware.new-lg4ff.enable = true; hardware.new-lg4ff.enable = true;
}; };
} }

View file

@ -1,9 +1,15 @@
{ user, userName }: { lib, pkgs, config, ... }:
with lib;
let
cfg = config.roles.git;
in
{ {
user,
userName,
}: {
lib,
pkgs,
config,
...
}:
with lib; let
cfg = config.roles.git;
in {
options.roles = { options.roles = {
git = { git = {
enable = mkEnableOption "email settings"; enable = mkEnableOption "email settings";
@ -11,7 +17,8 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
programs.git = { programs.git = {
enable = true; enable = true;
aliases = { aliases = {
@ -25,7 +32,7 @@ in
pull.rebase = true; pull.rebase = true;
}; };
}; };
}]; }
}; ];
};
} }

View file

@ -1,6 +1,10 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
{ pkgs,
config,
...
}:
with lib; {
options.keyboard = { options.keyboard = {
dvorak = { dvorak = {
enable = mkEnableOption "use a good keyboard layout on a qwerty keyboard"; enable = mkEnableOption "use a good keyboard layout on a qwerty keyboard";
@ -26,7 +30,9 @@ with lib;
}; };
} }
]; ];
services.xserver.xkbVariant = if config.keyboard.dvorak.enable then "dvorak" else ""; services.xserver.xkbVariant =
if config.keyboard.dvorak.enable
then "dvorak"
else "";
}; };
} }

View file

@ -1,9 +1,12 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
cfg = config.roles.laptop; cfg = config.roles.laptop;
in in {
{
options.roles = { options.roles = {
laptop = { laptop = {
enable = mkEnableOption "is a laptop"; enable = mkEnableOption "is a laptop";
@ -14,14 +17,17 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
displays = mkIf cfg.displays { displays = mkIf cfg.displays {
enable = true; enable = true;
displays = [{ displays = [
{
name = "eDP-1"; name = "eDP-1";
scaling = 1.2; scaling = 1.2;
}]; }
];
}; };
keyboard.dvorak.enable = true; keyboard.dvorak.enable = true;
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
settings = { settings = {
general = { general = {
@ -38,6 +44,7 @@ in
}; };
}; };
}; };
}]; }
];
}; };
} }

View file

@ -1,11 +1,14 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
cfg = config.programs.menu; cfg = config.programs.menu;
terminal = config.programs.terminal.package; terminal = config.programs.terminal.package;
termcmd = "${terminal}/bin/${terminal.pname}"; termcmd = "${terminal}/bin/${terminal.pname}";
in in {
{
options.programs = { options.programs = {
menu = { menu = {
enable = mkEnableOption "menu"; enable = mkEnableOption "menu";
@ -20,7 +23,8 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
programs.wofi = mkIf (cfg.package == pkgs.wofi) { programs.wofi = mkIf (cfg.package == pkgs.wofi) {
enable = true; enable = true;
settings = { settings = {
@ -28,6 +32,7 @@ in
insensitive = true; insensitive = true;
}; };
}; };
}]; }
];
}; };
} }

View file

@ -1,26 +1,48 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
cfg = config.roles.mpd; cfg = config.roles.mpd;
in in {
{
options.roles.mpd = { options.roles.mpd = {
enable = mkEnableOption "setup mpd client"; enable = mkEnableOption "setup mpd client";
host = mkOption {default = "192.168.1.2";}; host = mkOption {default = "192.168.1.2";};
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
programs.ncmpcpp = { programs.ncmpcpp = {
enable = true; enable = true;
settings.mpd_host = cfg.host; settings.mpd_host = cfg.host;
bindings = [ bindings = [
{ key = "j"; command = "scroll_down"; } {
{ key = "k"; command = "scroll_up"; } key = "j";
{ key = "l"; command = "next_column"; } command = "scroll_down";
{ key = "h"; command = "previous_column"; } }
{ key = "J"; command = [ "select_item" "scroll_down" ]; } {
{ key = "K"; command = [ "select_item" "scroll_up" ]; } key = "k";
command = "scroll_up";
}
{
key = "l";
command = "next_column";
}
{
key = "h";
command = "previous_column";
}
{
key = "J";
command = ["select_item" "scroll_down"];
}
{
key = "K";
command = ["select_item" "scroll_up"];
}
]; ];
}; };
services.mpd-mpris = { services.mpd-mpris = {
@ -41,7 +63,7 @@ in
}; };
}; };
}; };
}]; }
}; ];
};
} }

View file

@ -0,0 +1,19 @@
vim.g.mapleader = ' '
vim.g.maplocalleader = ' '
vim.o.relativenumber = true
vim.o.signcolumn = 'yes'
vim.o.tabstop = 2
vim.o.shiftwidth = 2
vim.o.expandtab = true
vim.o.smartindent = true
vim.o.hlsearch = false
vim.o.scrolloff = 6
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
vim.keymap.set("x", "p", "\"_dP")
vim.keymap.set("n", "<leader>y", "\"+y")
vim.keymap.set("v", "<leader>y", "\"+y")

View file

@ -0,0 +1,55 @@
-- Setup language servers.
local lspconfig = require('lspconfig')
lspconfig.tsserver.setup {
on_attach = function(client)
client.server_capabilities.documentFormattingProvider = false
end
}
lspconfig.eslint.setup {
on_attach = function(client)
client.server_capabilities.documentFormattingProvider = true
end
}
lspconfig.gopls.setup {}
lspconfig.nil_ls.setup {}
-- Global mappings.
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
vim.keymap.set('n', '<space>e', vim.diagnostic.open_float)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist)
-- Use LspAttach autocommand to only map the following keys
-- after the language server attaches to the current buffer
vim.api.nvim_create_autocmd('LspAttach', {
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
callback = function(ev)
-- Enable completion triggered by <c-x><c-o>
vim.bo[ev.buf].omnifunc = 'v:lua.vim.lsp.omnifunc'
-- Buffer local mappings.
-- See `:help vim.lsp.*` for documentation on any of the below functions
local opts = { buffer = ev.buf }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, opts)
vim.keymap.set('n', '<leader>wa', vim.lsp.buf.add_workspace_folder, opts)
vim.keymap.set('n', '<leader>wr', vim.lsp.buf.remove_workspace_folder, opts)
vim.keymap.set('n', '<leader>wl', function()
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
end, opts)
vim.keymap.set('n', '<leader>D', vim.lsp.buf.type_definition, opts)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
vim.keymap.set({ 'n', 'v' }, '<space>ca', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<leader>f', function()
vim.lsp.buf.format { async = true }
end, opts)
end,
})

View file

@ -1,12 +1,15 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
{ pkgs,
config,
...
}:
with lib; {
options.roles.personal = { options.roles.personal = {
enable = mkEnableOption "personal packages"; enable = mkEnableOption "personal packages";
}; };
config = mkIf config.roles.personal.enable { config = mkIf config.roles.personal.enable {
roles.email = { roles.email = {
enable = true; enable = true;
email = "tristan@tristans.cloud"; email = "tristan@tristans.cloud";
@ -22,7 +25,8 @@ with lib;
"en_US.UTF-8/UTF-8" "en_US.UTF-8/UTF-8"
]; ];
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
services.nextcloud-client.enable = true; services.nextcloud-client.enable = true;
services.gnome-keyring.enable = true; services.gnome-keyring.enable = true;
@ -47,7 +51,7 @@ with lib;
libsForQt5.neochat libsForQt5.neochat
bookworm bookworm
]; ];
}
}]; ];
}; };
} }

View file

@ -1,6 +1,10 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
scripts = config.programs.scripts; scripts = config.programs.scripts;
hotkeyType = types.submodule ({...}: { hotkeyType = types.submodule ({...}: {
@ -42,21 +46,22 @@ let
scriptToPackage = script: scriptToPackage = script:
pkgs.writeShellScriptBin script.name script.text; pkgs.writeShellScriptBin script.name script.text;
scriptExec = { script, hotkey }: scriptExec = {
"${scriptToPackage script}/bin/${script.name} ${hotkey.args}"; script,
hotkey,
}: "${scriptToPackage script}/bin/${script.name} ${hotkey.args}";
installScripts = scripts: installScripts = scripts: (map scriptToPackage (filter (s: s.install) scripts));
(map scriptToPackage (filter (s: s.install) scripts));
bindScript = script: concatStrings ( bindScript = script:
concatStrings (
map map
(hotkey: (
"${hotkey.modifier}, ${hotkey.key}, exec, ${scriptExec {inherit script hotkey;}}" hotkey: "${hotkey.modifier}, ${hotkey.key}, exec, ${scriptExec {inherit script hotkey;}}"
) )
script.hotkeys); script.hotkeys
);
in in {
{
options.programs = { options.programs = {
scripts = mkOption { scripts = mkOption {
type = types.listOf scriptType; type = types.listOf scriptType;
@ -65,10 +70,11 @@ in
}; };
config = { config = {
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
home.packages = installScripts scripts; home.packages = installScripts scripts;
wayland.windowManager.hyprland.settings.bind = (map bindScript scripts); wayland.windowManager.hyprland.settings.bind = map bindScript scripts;
}]; }
}; ];
};
} }

View file

@ -1,9 +1,12 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
cfg = config.programs.terminal; cfg = config.programs.terminal;
in in {
{
options.programs = { options.programs = {
terminal = { terminal = {
enable = mkEnableOption "editor"; enable = mkEnableOption "editor";
@ -14,13 +17,15 @@ in
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
programs.foot = mkIf (cfg.package == pkgs.foot) { programs.foot = mkIf (cfg.package == pkgs.foot) {
enable = true; enable = true;
server.enable = true; server.enable = true;
}; };
home.packages = [cfg.package]; home.packages = [cfg.package];
}]; }
];
}; };
} }

View file

@ -1,9 +1,12 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
let pkgs,
config,
...
}:
with lib; let
cfg = config.windowManager; cfg = config.windowManager;
in in {
{
options.windowManager = { options.windowManager = {
hyprland = mkEnableOption "hyprland"; hyprland = mkEnableOption "hyprland";
sway = mkEnableOption "sway"; sway = mkEnableOption "sway";
@ -21,11 +24,15 @@ in
command = "sway"; command = "sway";
user = user; user = user;
}; };
default_session = if cfg.sway then sway_session else hypr_session; default_session =
if cfg.sway
then sway_session
else hypr_session;
}; };
}; };
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
wayland.windowManager.hyprland = mkIf cfg.hyprland { wayland.windowManager.hyprland = mkIf cfg.hyprland {
enable = true; enable = true;
systemd.enable = true; systemd.enable = true;
@ -114,6 +121,7 @@ in
"QT_AUTO_SCREEN_SCALE_FACTOR,1" "QT_AUTO_SCREEN_SCALE_FACTOR,1"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1" "QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"NIXOS_OZONE_WL,1" "NIXOS_OZONE_WL,1"
"WLR_NO_HARDWARE_CURSORS,1"
]; ];
windowrule = [ windowrule = [
"float, title:wlogout" "float, title:wlogout"
@ -181,8 +189,14 @@ in
enable = true; enable = true;
systemdTarget = "graphical-session.target"; systemdTarget = "graphical-session.target";
events = [ events = [
{ event = "before-sleep"; command = "${pkgs.swaylock-effects}/bin/swaylock"; } {
{ event = "lock"; command = "${pkgs.swaylock-effects}/bin/swaylock"; } event = "before-sleep";
command = "${pkgs.swaylock-effects}/bin/swaylock";
}
{
event = "lock";
command = "${pkgs.swaylock-effects}/bin/swaylock";
}
]; ];
timeouts = [ timeouts = [
{ {
@ -282,8 +296,7 @@ in
} }
''; '';
}; };
}
];
}];
}; };
} }

View file

@ -1,12 +1,15 @@
{ user }: { lib, pkgs, config, ... }: {user}: {
with lib; lib,
{ pkgs,
config,
...
}:
with lib; {
options.roles.work = { options.roles.work = {
enable = mkEnableOption "work packages"; enable = mkEnableOption "work packages";
}; };
config = mkIf config.roles.work.enable { config = mkIf config.roles.work.enable {
roles.email = { roles.email = {
enable = true; enable = true;
email = "tristan.beedell@cryoserver.com"; email = "tristan.beedell@cryoserver.com";
@ -20,8 +23,8 @@ with lib;
package = pkgs.vscode; package = pkgs.vscode;
}; };
home-manager.users.${user}.imports = [{ home-manager.users.${user}.imports = [
{
home.packages = with pkgs; [ home.packages = with pkgs; [
onedrive onedrive
kubectl kubectl
@ -70,10 +73,11 @@ with lib;
bind = SUPER, t, focuswindow, brave-cifhbcnohmdccbgoicgdjpfamggdegmo-Profile_2 bind = SUPER, t, focuswindow, brave-cifhbcnohmdccbgoicgdjpfamggdegmo-Profile_2
''; '';
}; };
}
];
}]; nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (lib.getName pkg) [
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
# nonfree vscode required for dev containers # nonfree vscode required for dev containers
"vscode" "vscode"
"steam-run" "steam-run"
@ -97,6 +101,5 @@ with lib;
}; };
}; };
}; };
}; };
} }

View file

@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }: {
let config,
pkgs,
lib,
...
}: let
my-deps = { my-deps = {
notify-send = "${pkgs.libnotify}/bin/notify-send"; notify-send = "${pkgs.libnotify}/bin/notify-send";
playerctl = "${pkgs.playerctl}/bin/playerctl"; playerctl = "${pkgs.playerctl}/bin/playerctl";
@ -21,8 +25,7 @@ let
hyprpicker = "${pkgs.hyprpicker}/bin/hyprpicker"; hyprpicker = "${pkgs.hyprpicker}/bin/hyprpicker";
sed = "${pkgs.gnused}/bin/sed"; sed = "${pkgs.gnused}/bin/sed";
}; };
in in {
{
programs.scripts = [ programs.scripts = [
{ {
name = "play-pause"; name = "play-pause";
@ -38,7 +41,10 @@ in
fi fi
''; '';
hotkeys = [ hotkeys = [
{ modifier = ""; key = "XF86AudioPlay"; } {
modifier = "";
key = "XF86AudioPlay";
}
]; ];
} }
{ {
@ -56,7 +62,12 @@ in
items="$(rbw list)" items="$(rbw list)"
echo "$items" | ${my-deps.menu} | xargs -I_ rbw code _ | wl-copy echo "$items" | ${my-deps.menu} | xargs -I_ rbw code _ | wl-copy
''; '';
hotkeys = [{ modifier = "SUPER_SHIFT"; key = "P"; }]; hotkeys = [
{
modifier = "SUPER_SHIFT";
key = "P";
}
];
install = false; install = false;
} }
{ {
@ -72,7 +83,10 @@ in
cat "$FILE" | wl-copy -t image/png cat "$FILE" | wl-copy -t image/png
''; '';
hotkeys = [ hotkeys = [
{ modifier = "SUPER_SHIFT"; key = "S"; } {
modifier = "SUPER_SHIFT";
key = "S";
}
]; ];
} }
{ {
@ -82,8 +96,16 @@ in
${my-deps.notify-send} "Brightness" -h int:value:$(light) -a brightness-down -t 1000 ${my-deps.notify-send} "Brightness" -h int:value:$(light) -a brightness-down -t 1000
''; '';
hotkeys = [ hotkeys = [
{ modifier = ""; key = "XF86MonBrightnessDown"; args = "10"; } {
{ modifier = "SHIFT"; key = "XF86MonBrightnessDown"; args = "1"; } modifier = "";
key = "XF86MonBrightnessDown";
args = "10";
}
{
modifier = "SHIFT";
key = "XF86MonBrightnessDown";
args = "1";
}
]; ];
install = false; install = false;
} }
@ -94,8 +116,16 @@ in
${my-deps.notify-send} "Brightness" -h int:value:$(light) -a brightness-up -t 1000 ${my-deps.notify-send} "Brightness" -h int:value:$(light) -a brightness-up -t 1000
''; '';
hotkeys = [ hotkeys = [
{ modifier = ""; key = "XF86MonBrightnessUp"; args = "10"; } {
{ modifier = "SHIFT"; key = "XF86MonBrightnessUp"; args = "1"; } modifier = "";
key = "XF86MonBrightnessUp";
args = "10";
}
{
modifier = "SHIFT";
key = "XF86MonBrightnessUp";
args = "1";
}
]; ];
install = false; install = false;
} }
@ -118,18 +148,22 @@ in
text = '' text = ''
${my-deps.hyprpicker} | wl-copy && notify-send "Copied Colour" "$(wl-paste)" ${my-deps.hyprpicker} | wl-copy && notify-send "Copied Colour" "$(wl-paste)"
''; '';
hotkeys = [{ hotkeys = [
{
key = "G"; key = "G";
}]; }
];
} }
(lib.mkIf config.roles.mpd.enable { (lib.mkIf config.roles.mpd.enable {
name = "ncmpcpp"; name = "ncmpcpp";
text = '' text = ''
${my-deps.terminal} -e ncmpcpp ${my-deps.terminal} -e ncmpcpp
''; '';
hotkeys = [{ hotkeys = [
{
key = "M"; key = "M";
}]; }
];
install = false; install = false;
}) })
{ {
@ -137,9 +171,11 @@ in
text = '' text = ''
${my-deps.runmenu} ${my-deps.runmenu}
''; '';
hotkeys = [{ hotkeys = [
{
key = "D"; key = "D";
}]; }
];
install = false; install = false;
} }
{ {
@ -147,10 +183,12 @@ in
text = '' text = ''
hyprctl keyword misc:cursor_zoom_factor 2 hyprctl keyword misc:cursor_zoom_factor 2
''; '';
hotkeys = [{ hotkeys = [
{
modifier = "SUPER"; modifier = "SUPER";
key = "EQUAL"; key = "EQUAL";
}]; }
];
install = false; install = false;
} }
{ {
@ -158,10 +196,12 @@ in
text = '' text = ''
hyprctl keyword misc:cursor_zoom_factor 1 hyprctl keyword misc:cursor_zoom_factor 1
''; '';
hotkeys = [{ hotkeys = [
{
modifier = "SUPER"; modifier = "SUPER";
key = "MINUS"; key = "MINUS";
}]; }
];
install = false; install = false;
} }
{ {
@ -171,7 +211,10 @@ in
''; '';
hotkeys = [ hotkeys = [
{key = "bracketright";} {key = "bracketright";}
{ modifier = ""; key = "XF86AudioRaiseVolume"; } {
modifier = "";
key = "XF86AudioRaiseVolume";
}
]; ];
install = false; install = false;
} }
@ -182,7 +225,10 @@ in
''; '';
hotkeys = [ hotkeys = [
{key = "bracketleft";} {key = "bracketleft";}
{ modifier = ""; key = "XF86AudioLowerVolume"; } {
modifier = "";
key = "XF86AudioLowerVolume";
}
]; ];
install = false; install = false;
} }
@ -192,8 +238,14 @@ in
${my-deps.playerctl} next ${my-deps.playerctl} next
''; '';
hotkeys = [ hotkeys = [
{ modifier = "SUPER_SHIFT"; key = "period"; } {
{ modifier = ""; key = "XF86AudioNext"; } modifier = "SUPER_SHIFT";
key = "period";
}
{
modifier = "";
key = "XF86AudioNext";
}
]; ];
install = false; install = false;
} }
@ -203,8 +255,14 @@ in
${my-deps.playerctl} previous ${my-deps.playerctl} previous
''; '';
hotkeys = [ hotkeys = [
{ modifier = "SUPER_SHIFT"; key = "comma"; } {
{ modifier = ""; key = "XF86AudioPrev"; } modifier = "SUPER_SHIFT";
key = "comma";
}
{
modifier = "";
key = "XF86AudioPrev";
}
]; ];
install = false; install = false;
} }