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"
commandLineArgs ? "",
# Necessary for USB audio devices.
pulseSupport ? stdenv.isLinux,
libpulseaudio,
# For GPU acceleration support on Wayland (without the lib it doesn't seem to work)
libGL,
# For video acceleration via VA-API (--enable-features=VaapiVideoDecoder,VaapiVideoEncoder)
libvaSupport ? stdenv.isLinux,
libva,
enableVideoAcceleration ? libvaSupport,
# For Vulkan support (--enable-features=Vulkan); disabled by default as it seems to break VA-API
vulkanSupport ? false,
addOpenGLRunpath,
enableVulkan ? vulkanSupport,
}: let
inherit
(lib)
optional
optionals
makeLibraryPath
makeSearchPathOutput
makeBinPath
optionalString
strings
escapeShellArg
;
# command line arguments which are always set e.g "--disable-gpu" deps =
, commandLineArgs ? "" [
alsa-lib
# Necessary for USB audio devices. at-spi2-atk
, pulseSupport ? stdenv.isLinux at-spi2-core
, libpulseaudio atk
cairo
# For GPU acceleration support on Wayland (without the lib it doesn't seem to work) cups
, libGL dbus
expat
# For video acceleration via VA-API (--enable-features=VaapiVideoDecoder,VaapiVideoEncoder) fontconfig
, libvaSupport ? stdenv.isLinux freetype
, libva gdk-pixbuf
, enableVideoAcceleration ? libvaSupport glib
gtk3
# For Vulkan support (--enable-features=Vulkan); disabled by default as it seems to break VA-API libdrm
, vulkanSupport ? false libX11
, addOpenGLRunpath libGL
, enableVulkan ? vulkanSupport libxkbcommon
}: libXScrnSaver
libXcomposite
let libXcursor
inherit (lib) optional optionals makeLibraryPath makeSearchPathOutput makeBinPath libXdamage
optionalString strings escapeShellArg; libXext
libXfixes
deps = [ libXi
alsa-lib at-spi2-atk at-spi2-core atk cairo cups dbus expat libXrandr
fontconfig freetype gdk-pixbuf glib gtk3 libdrm libX11 libGL libXrender
libxkbcommon libXScrnSaver libXcomposite libXcursor libXdamage libxshmfence
libXext libXfixes libXi libXrandr libXrender libxshmfence libXtst
libXtst libuuid mesa nspr nss pango pipewire udev wayland libuuid
xorg.libxcb zlib snappy mesa
nspr
nss
pango
pipewire
udev
wayland
xorg.libxcb
zlib
snappy
] ]
++ optional pulseSupport libpulseaudio ++ optional pulseSupport libpulseaudio
++ optional libvaSupport libva; ++ optional libvaSupport libva;
@ -81,15 +122,15 @@ 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";
@ -105,12 +146,14 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ nativeBuildInputs = [
dpkg dpkg
(wrapGAppsHook.override { inherit makeWrapper; }) (wrapGAppsHook.override {inherit makeWrapper;})
]; ];
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
@ -171,7 +214,7 @@ stdenv.mkDerivation rec {
gappsWrapperArgs+=( gappsWrapperArgs+=(
--prefix LD_LIBRARY_PATH : ${rpath} --prefix LD_LIBRARY_PATH : ${rpath}
--prefix PATH : ${binpath} --prefix PATH : ${binpath}
--suffix PATH : ${lib.makeBinPath [ xdg-utils ]} --suffix PATH : ${lib.makeBinPath [xdg-utils]}
${optionalString (enableFeatures != []) '' ${optionalString (enableFeatures != []) ''
--add-flags "--enable-features=${strings.concatStringsSep "," enableFeatures}" --add-flags "--enable-features=${strings.concatStringsSep "," enableFeatures}"
''} ''}
@ -196,15 +239,15 @@ stdenv.mkDerivation rec {
meta = with lib; { meta = with lib; {
homepage = "https://brave.com/"; homepage = "https://brave.com/";
description = "Privacy-oriented browser for Desktop and Laptop computers"; description = "Privacy-oriented browser for Desktop and Laptop computers";
changelog = "https://github.com/brave/brave-browser/blob/master/CHANGELOG_DESKTOP.md#" + replaceStrings [ "." ] [ "" ] version; changelog = "https://github.com/brave/brave-browser/blob/master/CHANGELOG_DESKTOP.md#" + replaceStrings ["."] [""] version;
longDescription = '' longDescription = ''
Brave browser blocks the ads and trackers that slow you down, Brave browser blocks the ads and trackers that slow you down,
chew up your bandwidth, and invade your privacy. Brave lets you chew up your bandwidth, and invade your privacy. Brave lets you
contribute to your favorite creators automatically. contribute to your favorite creators automatically.
''; '';
sourceProvenance = with sourceTypes; [ binaryNativeCode ]; sourceProvenance = with sourceTypes; [binaryNativeCode];
license = licenses.mpl20; license = licenses.mpl20;
maintainers = with maintainers; [ uskudnik rht jefflabonte nasirhm ]; maintainers = with maintainers; [uskudnik rht jefflabonte nasirhm];
platforms = [ "x86_64-linux" ]; platforms = ["x86_64-linux"];
}; };
} }

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";
@ -18,13 +18,13 @@ buildGoModule rec {
vendorHash = "sha256-oIIyQbw42+B6T6Qn6nIV62Xr+8ms3tatfFI8ocYNr0A="; vendorHash = "sha256-oIIyQbw42+B6T6Qn6nIV62Xr+8ms3tatfFI8ocYNr0A=";
nativeBuildInputs = [ installShellFiles ]; nativeBuildInputs = [installShellFiles];
ldflags = [ "-s" "-w" "-X main.gVersion=r${version}" ]; ldflags = ["-s" "-w" "-X main.gVersion=r${version}"];
# Force the use of the pure-go implementation of the os/user library. # Force the use of the pure-go implementation of the os/user library.
# Relevant issue: https://github.com/gokcehan/lf/issues/191 # Relevant issue: https://github.com/gokcehan/lf/issues/191
tags = lib.optionals (!stdenv.isDarwin) [ "osusergo" ]; tags = lib.optionals (!stdenv.isDarwin) ["osusergo"];
postInstall = '' postInstall = ''
install -D --mode=444 lf.desktop $out/share/applications/lf.desktop install -D --mode=444 lf.desktop $out/share/applications/lf.desktop
@ -44,6 +44,6 @@ buildGoModule rec {
changelog = "https://github.com/gokcehan/lf/releases/tag/r${version}"; changelog = "https://github.com/gokcehan/lf/releases/tag/r${version}";
license = licenses.mit; license = licenses.mit;
platforms = platforms.unix; platforms = platforms.unix;
maintainers = with maintainers; [ dotlambda ]; maintainers = with maintainers; [dotlambda];
}; };
} }

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 = {
@ -21,9 +27,8 @@ let
glow = "${pkgs.glow}/bin/glow"; glow = "${pkgs.glow}/bin/glow";
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;
@ -149,13 +154,13 @@ in
drag = "%${pkgs.ripdrag}/bin/ripdrag -x \"$fx\""; drag = "%${pkgs.ripdrag}/bin/ripdrag -x \"$fx\"";
trash = "%${pkgs.trash-cli}/bin/trash-put \"$fx\""; trash = "%${pkgs.trash-cli}/bin/trash-put \"$fx\"";
open = "$set -f; ${pkgs.ranger}/bin/rifle -p 0 \"$fx\""; open = "$set -f; ${pkgs.ranger}/bin/rifle -p 0 \"$fx\"";
open-with = ''''${{ open-with = '' ''${{
set -f set -f
${pkgs.ranger}/bin/rifle -l "$fx" ${pkgs.ranger}/bin/rifle -l "$fx"
read -p "Open with: " method read -p "Open with: " method
${pkgs.ranger}/bin/rifle -p "$method" "$fx" ${pkgs.ranger}/bin/rifle -p "$method" "$fx"
}}''; }}'';
bulk-rename = ''''${{ bulk-rename = '' ''${{
old="$(mktemp)" old="$(mktemp)"
new="$(mktemp)" new="$(mktemp)"
if [ -n "$fs" ]; then if [ -n "$fs" ]; then
@ -183,7 +188,7 @@ in
image () { image () {
echo "$1" echo "$1"
${my-deps.chafa} "$1" -f sixel -s "$(($2/2))x$3" | sed 's/#/\n#/g' ${my-deps.chafa} "$1" -f sixel -s "$(($2/2))x$3" | sed 's/#/\n#/g'
${ my-deps.exiftool } "$1" ${my-deps.exiftool} "$1"
} }
batted () { batted () {
@ -214,7 +219,7 @@ in
ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batted --language=csv ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batted --language=csv
;; ;;
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka) *.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka)
${ my-deps.exiftool } "$1" ${my-deps.exiftool} "$1"
;; ;;
*.pdf) *.pdf)
[ ! -f "$CACHE.jpg" ] && \ [ ! -f "$CACHE.jpg" ] && \
@ -334,6 +339,4 @@ in
pdf-engine = "xelatex"; pdf-engine = "xelatex";
}; };
}; };
} }

View file

@ -1,22 +1,23 @@
# 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
]; ];
nix.settings = { nix.settings = {
experimental-features = [ "nix-command" "flakes" ]; experimental-features = ["nix-command" "flakes"];
}; };
nixpkgs.config.permittedInsecurePackages = [ nixpkgs.config.permittedInsecurePackages = [
"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;
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
@ -43,27 +44,42 @@ user: { config, pkgs, lib, ... }:
jack.enable = true; jack.enable = true;
}; };
# pipewire raop # pipewire raop
networking.firewall.allowedUDPPorts = [ 6002 6001 ]; networking.firewall.allowedUDPPorts = [6002 6001];
# network streaming # network streaming
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;
security.pam.services.swaylock = { }; security.pam.services.swaylock = {};
security.polkit.enable = true; security.polkit.enable = true;
systemd.user.services.polkit-gnome-authentication-agent-1 = { systemd.user.services.polkit-gnome-authentication-agent-1 = {
description = "polkit-gnome-authentication-agent-1"; description = "polkit-gnome-authentication-agent-1";
wantedBy = [ "graphical-session.target" ]; wantedBy = ["graphical-session.target"];
wants = [ "graphical-session.target" ]; wants = ["graphical-session.target"];
after = [ "graphical-session.target" ]; after = ["graphical-session.target"];
serviceConfig = { serviceConfig = {
Type = "simple"; Type = "simple";
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
@ -97,7 +113,7 @@ user: { config, pkgs, lib, ... }:
users.users.${user} = { users.users.${user} = {
isNormalUser = true; isNormalUser = true;
extraGroups = [ "wheel" "video" "networkmanager" ]; extraGroups = ["wheel" "video" "networkmanager"];
initialPassword = "pass"; initialPassword = "pass";
shell = pkgs.fish; shell = pkgs.fish;
}; };
@ -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,22 +1,24 @@
{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
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "sdhci_pci" ]; boot.initrd.availableKernelModules = ["xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "sdhci_pci"];
boot.initrd.kernelModules = [ "uas" "usbcore" "usb_storage" "vfat" "nls_cp437" "nls_iso8859_1" ]; boot.initrd.kernelModules = ["uas" "usbcore" "usb_storage" "vfat" "nls_cp437" "nls_iso8859_1"];
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"];
}; };
boot.initrd.postDeviceCommands = pkgs.lib.mkBefore '' boot.initrd.postDeviceCommands = pkgs.lib.mkBefore ''
@ -40,27 +42,24 @@
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";
}; };
swapDevices = [{ device = "/swap/swapfile"; }]; swapDevices = [{device = "/swap/swapfile";}];
# 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
@ -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,22 +1,24 @@
{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
]; ];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"];
boot.initrd.kernelModules = [ "uas" "usbcore" "usb_storage" "vfat" "nls_cp437" "nls_iso8859_1" ]; boot.initrd.kernelModules = ["uas" "usbcore" "usb_storage" "vfat" "nls_cp437" "nls_iso8859_1"];
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"];
}; };
boot.initrd.postDeviceCommands = pkgs.lib.mkBefore '' boot.initrd.postDeviceCommands = pkgs.lib.mkBefore ''
@ -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,29 +1,32 @@
{ 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;})
(import ./modules/editor.nix { inherit user; }) (import ./modules/editor.nix {inherit user;})
(import ./modules/keyboard.nix { inherit user; }) (import ./modules/keyboard.nix {inherit user;})
(import ./modules/display.nix { inherit user; }) (import ./modules/display.nix {inherit user;})
(import ./modules/work.nix { inherit user; }) (import ./modules/work.nix {inherit user;})
(import ./modules/menu.nix { inherit user; }) (import ./modules/menu.nix {inherit user;})
(import ./modules/email.nix { inherit user userName; }) (import ./modules/email.nix {inherit user userName;})
(import ./modules/mpd.nix { inherit user; }) (import ./modules/mpd.nix {inherit user;})
(import ./modules/git.nix { inherit user userName; }) (import ./modules/git.nix {inherit user userName;})
(import ./modules/laptop.nix { inherit user; }) (import ./modules/laptop.nix {inherit user;})
(import ./modules/dev.nix { inherit user; }) (import ./modules/dev.nix {inherit user;})
(import ./modules/personal.nix { inherit user; }) (import ./modules/personal.nix {inherit user;})
(import ./modules/gamer.nix { inherit user; }) (import ./modules/gamer.nix {inherit user;})
(import ./modules/wayland.nix { inherit user; }) (import ./modules/wayland.nix {inherit user;})
(import ../hardware/${name}.nix { inherit user; }) (import ../hardware/${name}.nix {inherit user;})
./scripts.nix ./scripts.nix
(import ../global/system.nix user) (import ../global/system.nix 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;
@ -25,12 +27,12 @@ nixpkgs.lib.nixosSystem rec {
}) })
{ {
nix.settings = { nix.settings = {
substituters = [ "https://hyprland.cachix.org" ]; substituters = ["https://hyprland.cachix.org"];
trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ]; trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="];
}; };
} }
inputs.stylix.nixosModules.stylix inputs.stylix.nixosModules.stylix
({ pkgs, ... }: { ({pkgs, ...}: {
stylix.image = ../images/demonslayer.png; stylix.image = ../images/demonslayer.png;
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml"; stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
}) })
@ -39,6 +41,6 @@ nixpkgs.lib.nixosSystem rec {
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
} }
(import ./home.nix { inherit inputs user userName name laptop work; }) (import ./home.nix {inherit inputs user userName name laptop work;})
]; ];
} }

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,57 +1,80 @@
{ 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"];
}; };
}; };
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,8 +93,9 @@ let
}; };
}; };
}); });
displayType = types.submodule displayType =
({ ... }: { types.submodule
({...}: {
options = { options = {
name = mkOption { name = mkOption {
description = "name of the display"; description = "name of the display";
@ -91,7 +115,7 @@ let
resolution = mkOption { resolution = mkOption {
description = "res"; description = "res";
type = resolutionType; type = resolutionType;
default = { }; default = {};
}; };
position.x = mkOption { position.x = mkOption {
default = -1; default = -1;
@ -108,36 +132,33 @@ 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;
default = [ ]; default = [];
}; };
}; };
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
@ -103,8 +107,8 @@ in
esac esac
''; '';
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;
@ -212,8 +218,8 @@ in
pgp-provider = "gpg"; pgp-provider = "gpg";
unsafe-accounts-conf = true; unsafe-accounts-conf = true;
}; };
ui = { }; ui = {};
viewer = { }; viewer = {};
filters = { filters = {
"text/plain" = "colorize"; "text/plain" = "colorize";
"text/calendar" = "calendar"; "text/calendar" = "calendar";
@ -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 = {
@ -37,11 +59,11 @@ in
ExecStart = "${pkgs.snapcast}/bin/snapclient -h ${cfg.host}"; ExecStart = "${pkgs.snapcast}/bin/snapclient -h ${cfg.host}";
}; };
Install = { Install = {
WantedBy = [ "graphical-session.target" ]; WantedBy = ["graphical-session.target"];
}; };
}; };
}; };
}]; }
];
}; };
} }

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,9 +1,13 @@
{ 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 ({...}: {
options = { options = {
key = mkOption { key = mkOption {
description = "the key"; description = "the key";
@ -19,7 +23,7 @@ let
}; };
}); });
scriptType = types.submodule ({ ... }: { scriptType = types.submodule ({...}: {
options = { options = {
name = mkOption { name = mkOption {
description = "name of the executable"; description = "name of the executable";
@ -30,7 +34,7 @@ let
hotkeys = mkOption { hotkeys = mkOption {
type = types.listOf hotkeyType; type = types.listOf hotkeyType;
description = "keys that run this script"; description = "keys that run this script";
default = [ ]; default = [];
}; };
install = mkOption { install = mkOption {
type = types.bool; type = types.bool;
@ -42,33 +46,35 @@ 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;
default = [ ]; default = [];
}; };
}; };
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 = [
{ {
@ -207,15 +221,15 @@ in
layer = "top"; layer = "top";
position = "top"; position = "top";
height = 36; height = 36;
modules-left = [ "hyprland/workspaces" "hyprland/window" ]; modules-left = ["hyprland/workspaces" "hyprland/window"];
modules-right = [ "mpris" "pulseaudio" "clock" "tray" "battery" ]; modules-right = ["mpris" "pulseaudio" "clock" "tray" "battery"];
clock = { clock = {
format = "📅 {:%a %b-%d %I:%M %p}"; format = "📅 {:%a %b-%d %I:%M %p}";
}; };
pulseaudio = { pulseaudio = {
format-muted = "🔇 {volume}"; format-muted = "🔇 {volume}";
format = "{icon} {volume}"; format = "{icon} {volume}";
format-icons.default = [ "🔈" "🔉" "🔊" ]; format-icons.default = ["🔈" "🔉" "🔊"];
on-click = "${pkgs.pavucontrol}/bin/pavucontrol"; on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
}; };
mpris = { mpris = {
@ -232,7 +246,7 @@ in
}; };
battery = { battery = {
format = "{icon} {capacity}%"; format = "{icon} {capacity}%";
format-icons = [ "🤏" "🪫" "🔋" "🔋" ]; format-icons = ["🤏" "🪫" "🔋" "🔋"];
format-charging = "🔌 {capacity}%"; format-charging = "🔌 {capacity}%";
states = { states = {
warning = 30; warning = 30;
@ -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"
@ -81,7 +85,7 @@ with lib;
networking = { networking = {
networkmanager = { networkmanager = {
plugins = [ pkgs.networkmanager-openvpn ]; plugins = [pkgs.networkmanager-openvpn];
}; };
}; };
@ -93,10 +97,9 @@ with lib;
enable = false; enable = false;
setSocketVariable = true; setSocketVariable = true;
daemon.settings = { daemon.settings = {
"userns-remap"= "default"; "userns-remap" = "default";
}; };
}; };
}; };
}; };
} }

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,25 +41,33 @@ in
fi fi
''; '';
hotkeys = [ hotkeys = [
{ modifier = ""; key = "XF86AudioPlay"; } {
modifier = "";
key = "XF86AudioPlay";
}
]; ];
} }
{ {
name = "bwmenu"; name = "bwmenu";
text = '' text = ''
items="$(rbw list)" items="$(rbw list)"
echo "$items" | ${ my-deps.menu } | xargs -I_ rbw get _ | wl-copy echo "$items" | ${my-deps.menu} | xargs -I_ rbw get _ | wl-copy
''; '';
hotkeys = [{ key = "P"; }]; hotkeys = [{key = "P";}];
install = false; install = false;
} }
{ {
name = "bwotpmenu"; name = "bwotpmenu";
text = '' text = ''
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;
} }
@ -110,7 +140,7 @@ in
${my-deps.xargs} -I_ ${my-deps.hyprctl} dispatch focuswindow title:"_" ${my-deps.xargs} -I_ ${my-deps.hyprctl} dispatch focuswindow title:"_"
''; '';
hotkeys = [ hotkeys = [
{ key = "TAB"; } {key = "TAB";}
]; ];
} }
{ {
@ -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;
} }
{ {
@ -170,19 +210,25 @@ in
${my-deps.amixer} sset Master 5%+ && ${my-deps.amixer} sset Master unmute ${my-deps.amixer} sset Master 5%+ && ${my-deps.amixer} sset Master unmute
''; '';
hotkeys = [ hotkeys = [
{ key = "bracketright"; } {key = "bracketright";}
{ modifier = ""; key = "XF86AudioRaiseVolume"; } {
modifier = "";
key = "XF86AudioRaiseVolume";
}
]; ];
install = false; install = false;
} }
{ {
name = "lower-volume"; name = "lower-volume";
text = '' text = ''
${ my-deps.amixer } sset Master 5%- ${my-deps.amixer} sset Master 5%-
''; '';
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;
} }
@ -212,7 +270,7 @@ in
name = "terminal"; name = "terminal";
text = my-deps.terminal; text = my-deps.terminal;
hotkeys = [ hotkeys = [
{ key = "RETURN"; } {key = "RETURN";}
]; ];
install = false; install = false;
} }
@ -220,7 +278,7 @@ in
name = "fileman"; name = "fileman";
text = my-deps.fileman; text = my-deps.fileman;
hotkeys = [ hotkeys = [
{ key = "O"; } {key = "O";}
]; ];
install = false; install = false;
} }
@ -237,7 +295,7 @@ in
esac esac
''; '';
hotkeys = [ hotkeys = [
{ key = "Z"; } {key = "Z";}
]; ];
install = false; install = false;
} }