dotfiles/default.nix

1135 lines
28 KiB
Nix
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, ... }:
let
nixvim = import (builtins.fetchGit {
url = "https://github.com/nix-community/nixvim";
});
stylix = import (pkgs.fetchFromGitHub {
owner = "danth";
repo = "stylix";
rev = "1ff9d37d27377bfe8994c24a8d6c6c1734ffa116";
sha256 = "0dz8h1ga8lnfvvmvsf6iqvnbvxrvx3qxi0y8s8b72066mqgvy8y5";
});
fontInstallPhase = ''
runHook preInstall
install -Dm644 *.ttc -t $out/share/fonts/
runHook postInstall
'';
my-wqy-zenhei = pkgs.stdenv.mkDerivation rec {
pname = "wqy-zenhei";
version = "0.9.45";
src = pkgs.fetchurl {
url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz";
hash = "sha256-5LfjBkdb+UJ9F1dXjw5FKJMMhMROqj8WfUxC8RDuddY=";
};
installPhase = fontInstallPhase;
};
my-wqy-microhei = pkgs.stdenv.mkDerivation rec {
pname = "wqy-microhei";
version = "0.2.0-beta";
src = pkgs.fetchurl {
url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz";
hash = "sha256-KAKsgCOqNqZupudEWFTjoHjTd///QhaTQb0jeHH3IT4=";
};
installPhase = fontInstallPhase;
};
my-wqy-bitmapsong = pkgs.stdenv.mkDerivation rec {
pname = "wqy-bitmapsong-pcf";
version = "1.0.0-RC1";
src = pkgs.fetchurl {
url = "mirror://sourceforge/wqy/${pname}-${version}.tar.gz";
#hash = "sha256-r2Vf7ftJCqu7jOc2AqCKaoR/r8eNw2P/OQGqbDOEyl0=";
hash = "sha256-0uvwkRUbvJ0remTnlP8dElRjaBVd6iukNYBTE/CTO7s=";
};
buildInputs = [ pkgs.fontforge ];
buildPhase = ''
newName() {
test "''${1:5:1}" = i && _it=Italic || _it=
case ''${1:6:3} in
400) test -z $it && _weight=Medium ;;
700) _weight=Bold ;;
esac
_pt=''${1%.pcf}
_pt=''${_pt#*-}
echo "WenQuanYi_Bitmap_Song$_weight$_it$_pt"
}
for i in *.pcf; do
fontforge -lang=ff -c "Open(\"$i\"); Generate(\"$(newName $i).otb\")"
done
'';
installPhase = ''
install -Dm644 *.otb -t $out/share/fonts/
'';
};
in {
imports =
[
# Include home manager
<home-manager/nixos>
];
# Enable NUR
nixpkgs.config.packageOverrides = pkgs: {
# TODO: Pin the version
nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") {
inherit pkgs;
};
};
# Use the systemd-boot EFI boot loader.
boot = {
loader = {
systemd-boot.enable = true;
systemd-boot.editor = false;
efi.canTouchEfiVariables = true;
timeout = 0;
};
tmp.cleanOnBoot = true;
consoleLogLevel = 0;
initrd.verbose = false;
initrd.checkJournalingFS = false;
plymouth = {
enable = false;
theme = "text";
};
kernelParams = [
"quiet"
"boot.shell_on_fail"
"loglevel=3"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
"video=efifb:nobgrt"
"bgrt_disable"
];
};
# Set up console
console = {
keyMap = "us";
};
# Set up networking
networking.wireless.userControlled.enable = true;
networking.hostName = "20212060"; # Define your hostname.
networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
networking.wireless.allowAuxiliaryImperativeNetworks = true;
# Set up graphics
hardware.graphics.enable32Bit = true;
hardware.graphics.enable = true;
services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = false;
powerManagement.finegrained = false;
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
prime = {
intelBusId = "PCI:0:2:0";
nvidiaBusId = "PCI:1:0:0";
offload = {
enable = true;
enableOffloadCmd = true;
};
};
};
# Set up tailscale
services.tailscale = {
enable = true;
useRoutingFeatures = "client";
};
# Set time zone.
time.timeZone = "Europe/Amsterdam";
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# Enable sound
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
};
# Set up input
services.libinput.enable = true;
# Display manager
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --remember --greeting \"Hewwo! >_< :3\" --time --cmd river --asterisks";
user = "greeter";
};
};
};
# PAM setup
security.pam.services.waylock = {};
# Enable programs
programs.river.enable = true;
xdg.portal = {
enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-wlr
];
};
# Gamer moment
programs.steam.enable = true;
# Define a user account. Don't forget to set a password with passwd.
users.users.jan = {
isNormalUser = true;
extraGroups = [ "wheel" ]; # Enable sudo for the user.
};
home-manager.backupFileExtension = "bak";
home-manager.users.jan = let
# Theming constants
colors = config.home-manager.users.jan.lib.stylix.colors;
fonts = config.home-manager.users.jan.stylix.fonts;
borderSize = 1;
windowPadding = 2;
waylockOptions = "-init-color 0x${colors.base00} -input-color 0x${colors.base02} -fail-color 0x${colors.base00}";
in {
# Extra modules
imports = [
nixvim.homeManagerModules.nixvim
stylix.homeManagerModules.stylix
];
# Packages
home.packages = with pkgs; [
# Programs
vscode
feishin
discord
obsidian
winbox
# Utilities
pulsemixer
wl-clipboard
pinentry-rofi
wtype
waylock
playerctl
# Fish plugin dependencies
grc
fzf
# Rust development
rustc
cargo
rustfmt
# Bitwarden
rofi-rbw
# LaTeX libraries
(pkgs.texlive.combine {
inherit (pkgs.texlive) scheme-full;
})
];
# Allow unfree
nixpkgs.config.allowUnfree = true;
# Stylix
stylix = {
enable = true;
polarity = "dark";
base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml";
fonts = {
monospace = {
package = pkgs.dina-font;
name = "Dina";
};
sizes = {
terminal = 9;
};
};
autoEnable = false;
targets = {
foot.enable = true;
nixvim.enable = true;
qutebrowser.enable = true;
vscode.enable = true;
zathura.enable = true;
};
};
# Fish shell
programs.fish = {
enable = true;
plugins = [
{ name = "done"; src = pkgs.fishPlugins.done.src; }
{ name = "fzf"; src = pkgs.fishPlugins.fzf-fish.src; }
{ name = "grc"; src = pkgs.fishPlugins.grc.src; }
];
};
# Bash prompt
programs.bash = {
enable = true;
initExtra = ''
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
then
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
bashrcExtra = ''
FG_BLACK="\[$(tput setaf 0)\]"
FG_RED="\[$(tput setaf 1)\]"
FG_GREEN="\[$(tput setaf 2)\]"
FG_YELLOW="\[$(tput setaf 3)\]"
FG_BLUE="\[$(tput setaf 4)\]"
FG_MAGENTA="\[$(tput setaf 5)\]"
FG_CYAN="\[$(tput setaf 6)\]"
FG_WHITE="\[$(tput setaf 7)\]"
RESET="\[$(tput sgr0)\]"
export PS0="\n''${RESET}"
export PS1="''${FG_GREEN}\n\w\n"
export PS2=""
'';
};
# Direnv setup
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
# Zathura
programs.zathura = {
enable = true;
options = {
guioptions = "none";
};
};
# Qutebrowser
programs.qutebrowser = {
enable = true;
extraConfig = ''
config.set("colors.webpage.darkmode.enabled", False)
config.set("colors.webpage.preferred_color_scheme", "dark")
config.set("fonts.default_family", "${fonts.monospace.name}")
config.set("fonts.default_size", "${toString fonts.sizes.terminal}pt")
'';
};
# Bitwarden client
programs.rbw = {
enable = true;
settings = {
base_url = "https://keys.bulthuis.dev";
identity_url = "https://keys.bulthuis.dev";
email = "jan@bulthuis.dev";
pinentry = pkgs.pinentry;
};
};
# Firefox
programs.firefox = {
enable = true;
policies = {
AppAutoUpdate = false;
BlockAboutAddons = true;
BlockAboutConfig = true;
BlockAboutProfiles = true;
DisableAppUpdate = true;
DisableFeedbackCommands = true;
DisableMasterPasswordCreation = true;
DisablePocket = true;
DisableProfileImport = true;
DisableProfileRefresh = true;
DisableSetDesktopBackground = true;
DisableTelemetry = true;
DisplayBookmarksToolbar = "never";
DisplayMenuBar = "never";
DNSOverHTTPS = { Enabled = false; };
DontCheckDefaultBrowser = true;
PasswordManagerEnabled = false;
TranslateEnabled = true;
UseSystemPrintDialog = true;
};
profiles.nixos = {
search.default = "DuckDuckGo";
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin
];
settings = {
"browser.tabs.inTitlebar" = 0;
"extensions.autoDisableScopes" = 0;
};
# Force overwriting configuration file
search.force = true;
containersForce = true;
};
};
# Email setup
accounts.email.accounts = {
Personal = {
primary = true;
realName = "Jan Bulthuis";
userName = "jan@bulthuis.dev";
address = "jan@bulthuis.dev";
thunderbird.enable = true;
flavor = "plain";
imap = {
host = "mail.bulthuis.dev";
port = 993;
};
smtp = {
host = "mail.bulthuis.dev";
port = 465;
};
};
};
# Thunderbird setup
programs.thunderbird = {
enable = true;
profiles.nixos = {
isDefault = true;
};
};
# Rofi setup
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland;
font = "${fonts.monospace.name} ${toString fonts.sizes.terminal}";
theme = let
inherit (config.home-manager.users.jan.lib.formats.rasi) mkLiteral;
in {
"*" = {
background-color = mkLiteral "rgba(0, 0, 0, 0%)";
border-color = mkLiteral colors.withHashtag.base05;
text-color = mkLiteral colors.withHashtag.base05;
};
mainbox = {
background-color = mkLiteral colors.withHashtag.base00;
border = mkLiteral "${toString borderSize}px";
};
element-text = {
highlight = mkLiteral colors.withHashtag.base09;
};
inputbar = {
children = mkLiteral "[textbox-search, entry]";
};
listview = {
padding = mkLiteral "2px 0px";
};
textbox-search = {
expand = false;
content = "> ";
};
"inputbar, message" = {
padding = mkLiteral "2px";
};
element = {
padding = mkLiteral "0px 2px";
};
"element selected" = {
background-color = mkLiteral colors.withHashtag.base02;
};
};
};
# Dark mode
dconf.settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
};
qt = {
enable = true;
platformTheme.name = "adwaita";
style.name = "adwaita-dark";
};
systemd.user.sessionVariables = config.home-manager.users.jan.home.sessionVariables;
# Configure GTK
gtk = let
css = ''
headerbar.default-decoration {
margin-bottom: 50px;
margin-top: -100px;
}
window.csd,
window.csd decoration {
box-shadow: none;
}
'';
in {
enable = true;
# Dark mode
theme = {
name = "Adwaita-dark";
package = pkgs.gnome-themes-extra;
};
# Disable CSD
gtk3.extraCss = css;
gtk4.extraCss = css;
};
# Cursors
home.pointerCursor = {
gtk.enable = true;
name = lib.mkForce "BreezeX-RosePine-Linux";
package = lib.mkForce pkgs.rose-pine-cursor;
size = lib.mkForce 24;
x11 = {
defaultCursor = lib.mkForce "BreezeX-RosePine-Linux";
enable = true;
};
};
# Neovim setup
programs.nixvim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
extraPackages = with pkgs; [
];
opts = {
number = true;
relativenumber = true;
signcolumn = "yes";
ignorecase = true;
smartcase = true;
tabstop = 4;
shiftwidth = 4;
softtabstop = 0;
expandtab = true;
smarttab = true;
list = true;
listchars = "tab:»«,trail:·,extends:,precedes:,nbsp:";
};
diagnostics = {
enable = true;
signs = true;
underline = true;
update_in_insert = true;
};
extraConfigLua = ''
vim.fn.sign_define("DiagnosticSignError",
{text = "", texthl = "DiagnosticSignError"})
vim.fn.sign_define("DiagnosticSignWarn",
{text = "", texthl = "DiagnosticSignWarn"})
vim.fn.sign_define("DiagnosticSignInfo",
{text = "", texthl = "DiagnosticSignInfo"})
vim.fn.sign_define("DiagnosticSignHint",
{text = "💡", texthl = "DiagnosticSignHint"})
'';
keymaps = [
# Save shortcut
{
action = ":update<CR>";
key = "<C-s>";
mode = "n";
}
{
action = "<C-o>:update<CR>";
key = "<C-s>";
mode = "i";
}
# Neo tree
{
action = ":Neotree action=focus reveal toggle<CR>";
key = "<leader>n";
mode = "n";
options.silent = true;
}
];
autoCmd = [
{
desc = "Automatic formatting";
event = "BufWritePre";
callback = {
__raw = ''
function()
vim.lsp.buf.format {
async = false,
}
end
'';
};
}
];
highlight = {
Comment = {
italic = true;
fg = colors.withHashtag.base03;
};
};
plugins.lsp = {
enable = true;
};
#plugins.treesitter = {
# enable = true;
#};
plugins.cmp = {
enable = true;
settings = {
mapping = {
"<C-Space>" = "cmp.mapping.complete()";
"<C-d>" = "cmp.mapping.scroll_docs(-4)";
"<C-e>" = "cmp.mapping.close()";
"<C-f>" = "cmp.mapping.scroll_docs(4)";
"<CR>" = "cmp.mapping.confirm({ select = true })";
"<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})";
"<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})";
};
sources = [
{ name = "path"; }
{ name = "nvim_lsp"; }
];
};
};
plugins.neo-tree = {
enable = true;
closeIfLastWindow = true;
window = {
width = 30;
autoExpandWidth = true;
};
extraOptions = {
default_component_configs.git_status.symbols = {
# Change type
added = "+";
deleted = "";
modified = "";
renamed = "";
# Status type
untracked = "?";
ignored = "";
unstaged = "";
staged = "";
conflict = "";
};
};
};
#plugins.cmp-nvim-lsp.enable = true;
plugins.gitsigns = {
enable = true;
settings.current_line_blame = true;
};
#plugins.copilot-vim = {
# enable = true;
#};
plugins.rust-tools = {
enable = true;
};
plugins.vimtex = {
enable = true;
texlivePackage = null;
settings = {
view_method = "zathura";
};
};
};
programs.neovim.defaultEditor = true;
# Foot setup
programs.foot = {
enable = true;
settings = {
main = let
font = fonts.monospace.name;
size = toString fonts.sizes.terminal;
in {
font = lib.mkForce "${font}:style=Regular:size=${size}";
font-bold = "${font}:style=Bold:size=${size}";
font-italic = "${font}:style=Italic:size=${size}";
font-bold-italic = "${font}:style=Bold Italic:size=${size}";
};
};
};
# Fuzzel setup
#programs.fuzzel = {
# enable = true;
# settings = {
# main = {
# font = "${fonts.monospace.name}:size=${toString fonts.sizes.terminal}";
# icons-enabled = "no";
# horizontal-pad = borderSize;
# vertical-pad = borderSize;
# inner-pad = 2;
# dpi-aware = "no";
# };
# colors = {
# background = colors.base00 + "ff";
# text = colors.base05 + "ff";
# match = colors.base09 + "ff";
# selection = colors.base02 + "ff";
# selection-text = colors.base05 + "ff";
# selection-match = colors.base09 + "ff";
# border = colors.base05 + "ff";
# };
# border = {
# width = borderSize;
# radius = 0;
# };
# };
# };
# Mako notifications setup
services.mako = {
enable = true;
anchor = "top-right";
defaultTimeout = 5000;
backgroundColor = "#${colors.base00}ff";
textColor = "#${colors.base05}ff";
borderColor = "#${colors.base05}ff";
progressColor = "#${colors.base09}ff";
borderRadius = 0;
borderSize = borderSize;
font = "${fonts.monospace.name} ${toString fonts.sizes.terminal}";
};
# Waybar setup
programs.waybar = {
enable = true;
systemd = {
enable = true;
};
settings = {
mainBar = {
layer = "top";
spacing = 16;
modules-left = [
"river/tags"
];
modules-center = [
#"river/window"
"mpris"
];
modules-right = [
"pulseaudio"
"battery"
"clock"
];
"river/window" = {
max-length = 50;
};
"river/tags" = {
tag-labels = [
""
""
""
""
""
""
""
""
""
];
disable-click = false;
};
pulseaudio = {
tooltip = false;
format = "{icon}{volume}%"; # Spacing achieved using "Thin Space"
#format-muted = "";
format-muted = "{icon}--%"; # Spacing achieved using "Thin Space"
format-icons = {
#headphone = "";
#default = [ "" "" ];
headphone = "";
headphone-muted = "";
default = [ "" "" "" ];
};
};
battery = {
format = "{icon}{capacity}%"; # Spacing achieved using "Thin Space"
format-charging = "{capacity}%"; # Spacing achieved using "Thin Space"
#format-icons = [ "󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ];
format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ];
interval = 1;
};
clock = {
#format = "󰅐 {:%H:%M}";
#format = "   {:%H:%M}"; # Spacing achieved using "Thin Space"
format = "{:%H:%M}";
};
mpris = {
format = "{dynamic}";
tooltip-format = "";
interval = 1;
};
};
};
style = ''
window#waybar {
color: #${colors.base05};
background-color: #${colors.base00};
border-style: none none solid none;
border-width: ${toString borderSize}px;
border-color: #${colors.base01};
font-size: 12px;
font-family: "${fonts.monospace.name}";
}
.modules-right {
margin: 0 8px 0 0;
}
#tags button {
color: #${colors.base03};
padding: 0 5px 1px 5px;
border-radius: 0;
font-size: 16px;
font-family: "Unifont";
}
#tags button.occupied {
color: #${colors.base05};
}
#tags button.focused {
color: #${colors.base09};
}
#tags.button.bell {
color: #${colors.base0A};
}
'';
};
# River setup
wayland.windowManager.river = {
enable = true;
xwayland.enable = true;
settings = let
layout = "rivertile";
layoutOptions = "-outer-padding ${toString windowPadding} -view-padding ${toString windowPadding}";
modes = ["normal" "locked"];
tags = [1 2 3 4 5 6 7 8 9];
# Quick pow function
pow2 = power:
if power != 0
then 2 * (pow2 (power - 1))
else 1;
# Modifiers
main = "Super";
ssm = "Super+Shift";
sas = "Super+Alt+Shift";
sam = "Super+Alt";
scm = "Super+Control";
scam = "Super+Control+Alt";
ssc = "Super+Shift+Control";
in {
default-layout = "${layout}";
set-repeat = "50 300";
xcursor-theme = "BreezeX-RosePine-Linux 24";
keyboard-layout = "-options \"caps:escape\" us";
border-width = toString borderSize;
background-color = "0x${colors.base00}";
border-color-focused = "0x${colors.base05}";
border-color-unfocused = "0x${colors.base01}";
border-color-urgent = "0x${colors.base09}";
spawn = [
"\"${layout} ${layoutOptions}\""
"\"systemctl --user restart waybar\""
];
map = (lib.attrsets.recursiveUpdate ({
normal = {
"${main} Q" = "close";
"${ssm} E" = "spawn \"systemctl --user stop waybar && riverctl exit\"";
# Basic utilities
"${main} X " = "spawn \"waylock -fork-on-lock ${waylockOptions}\"";
"${ssm} Return" = "spawn foot";
"${main} P" = "spawn \"rofi -show drun\"";
"${ssm} P" = "spawn rofi-rbw";
# Window focus
"${main} J" = "focus-view next";
"${main} K" = "focus-view previous";
# Swap windows
"${ssm} J" = "swap next";
"${ssm} K" = "swap previous";
"${main} Return" = "zoom";
# Main ratio
"${main} H" = "send-layout-cmd rivertile 'main-ratio -0.05'";
"${main} L" = "send-layout-cmd rivertile 'main-ratio +0.05'";
# Main count
"${ssm} H" = "send-layout-cmd rivertile 'main-count +1'";
"${ssm} L" = "send-layout-cmd rivertile 'main-count -1'";
# Tags
"${main} 0" = "set-focused-tags ${toString (pow2 32 - 1)}";
"${ssm} 0" = "set-view-tags ${toString (pow2 32 - 1)}";
# Orientation
"${main} Up" = "send-layout-cmd rivertile \"main-location top\"";
"${main} Right" = "send-layout-cmd rivertile \"main-location right\"";
"${main} Down" = "send-layout-cmd rivertile \"main-location bottom\"";
"${main} Left" = "send-layout-cmd rivertile \"main-location left\"";
# Move floating windows
"${sam} H" = "move left 100";
"${sam} J" = "move down 100";
"${sam} K" = "move up 100";
"${sam} L" = "move right 100";
# Snap floating windows
"${scam} H" = "snap left";
"${scam} J" = "snap down";
"${scam} K" = "snap up";
"${scam} L" = "snap right";
# Resize floating windows
"${sas} H" = "resize horizontal -100";
"${sas} J" = "resize vertical 100";
"${sas} K" = "resize vertical -100";
"${sas} L" = "resize horizontal 100";
# Toggle modes
"${main} Space" = "toggle-float";
"${main} F" = "toggle-fullscreen";
} // builtins.listToAttrs (builtins.concatLists (map (tag: [
{ name = "${main} ${toString tag}"; value = "set-focused-tags ${toString (pow2 (tag - 1))}"; }
{ name = "${ssm} ${toString tag}"; value = "set-view-tags ${toString (pow2 (tag - 1))}"; }
{ name = "${scm} ${toString tag}"; value = "toggle-focused-tags ${toString (pow2 (tag - 1))}"; }
{ name = "${ssc} ${toString tag}"; value = "toggle-view-tags ${toString (pow2 (tag - 1))}"; }
]) tags));
}) (builtins.listToAttrs (map (mode: {
name = "${mode}";
value = {
# Control volume
"None XF86AudioRaiseVolume" = "spawn \"pulsemixer --change-volume +5\"";
"None XF86AudioLowerVolume" = "spawn \"pulsemixer --change-volume -5\"";
"None XF86AudioMute" = "spawn \"pulsemixer --toggle-mute\"";
# Control brightness
"None XF86MonBrightnessUp" = "spawn \"brightnessctl set +5%\"";
"None XF86MonBrightnessDown" = "spawn \"brightnessctl set 5%-\"";
# Control music playback
"None XF86Messenger" = "spawn \"playerctl previous\"";
"None XF86Go" = "spawn \"playerctl play-pause\"";
"None Cancel" = "spawn \"playerctl next\"";
};
}) modes)));
map-pointer = {
normal = {
"${main} BTN_LEFT" = "move-view";
"${main} BTN_RIGHT" = "resize-view";
"${main} BTN_MIDDLE" = "toggle-float";
};
};
input = {
"'*'" = {
accel-profile = "adaptive";
pointer-accel = "0.5";
scroll-factor = "0.8";
};
"'*Synaptics*'" = {
natural-scroll = "enabled";
};
};
rule-add = {
"-app-id" = {
"'bar'" = "csd";
"'*'" = "ssd";
};
};
};
};
home.stateVersion = "24.05";
};
# Global neovim
programs.neovim = {
enable = true;
defaultEditor = true;
};
# dconf
programs.dconf.enable = true;
# Fonts
fonts.packages = with pkgs; [
my-wqy-zenhei
my-wqy-microhei
my-wqy-bitmapsong
cozette
#uw-ttyp0
#ucs-fonts
dina-font # Cool but too small :(
#unifont # Replace with Kissinger2
#unifont_upper # Replace with Kissinger 2
(nerdfonts.override { fonts = ["NerdFontsSymbolsOnly"]; })
];
fonts.fontconfig.defaultFonts = {
serif = [
"DejaVu Serif"
];
sansSerif = [
"DejaVu Sans"
];
monospace = [
"Dina"
];
emoji = [
"CozetteVector"
"Noto Color Emoji"
];
};
fonts.fontconfig.localConf = ''
<alias>
<family>Dina</family>
<prefer>
<family>Dina</family>
<family>Cozette</family>
<family>CozetteVector</family>
<family>Fixed</family>
<family>Symbols Nerd Font Mono</family>
<family>WenQuanYi Bitmap Song</family>
</prefer>
</alias>
'';
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
git
vim
neovim
wget
curl
brightnessctl
];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
system.copySystemConfiguration = true;
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "24.05"; # Did you read the comment?
}