forked from extern/nix-config
c0810fd98e
I originally wasn't going to mix logic from my dotfiles with NixOS, however I was unable to simply use my abbreviations after adding ~/.config/fish/config.fish, so I decided to give it a try. Using Nix to manage fish abbreviations feels nicer than using a config.fish because I am now easily able to manipulate these abbreviations with the limitless possibilities of the Nix language, and with the guarantee that the output is reproducible.
313 lines
8.2 KiB
Nix
313 lines
8.2 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
{
|
|
imports = [ ./hardware-configuration.nix ];
|
|
|
|
boot.loader.systemd-boot.enable = true;
|
|
boot.loader.efi.canTouchEfiVariables = true;
|
|
|
|
networking.hostName = "nixos";
|
|
networking.networkmanager.enable = true;
|
|
networking.networkmanager.unmanaged = [ "interface-name:ve-*" ];
|
|
networking.networkmanager.dns = "none";
|
|
networking.useHostResolvConf = true;
|
|
|
|
services.vnstat.enable = true;
|
|
services.tumbler.enable = true;
|
|
services.xserver.displayManager.sddm.enable = true;
|
|
|
|
programs.fish.enable = true;
|
|
users.defaultUserShell = pkgs.fish;
|
|
environment.shells = with pkgs; [ fish ];
|
|
programs.fish.shellAbbrs = {
|
|
g = "git";
|
|
ga = "git add";
|
|
gaa = "git add --all";
|
|
gap = "git add --patch";
|
|
gb = "git branch"; # List all branches
|
|
gc = "git commit -m";
|
|
gca = "git commit --amend";
|
|
gcl = "git clone";
|
|
gco = "git checkout";
|
|
gd = "git diff"; # Show all file changes not staged yet
|
|
gdi = "git difftool --no-symlinks --dir-diff";
|
|
gds = "git diff --staged"; # Show changes staged but not committed
|
|
gdsi = "git difftool --no-symlinks --dir-diff --staged";
|
|
gi = "git init";
|
|
gl = "git log --oneline --decorate --all --graph -n 10";
|
|
gm = "git merge";
|
|
gp = "git push"; # Push your commits to a remote server
|
|
gr = "git reset HEAD~"; # Undo the last commit but keep changed files
|
|
gra = "git remote add";
|
|
gre = "git remote --verbose"; # List all remotes
|
|
grh = "git reset HEAD";
|
|
grr =
|
|
"git reset --hard HEAD~"; # Remove the last commit and all changes with it
|
|
gs = "git status";
|
|
gst = "git stash";
|
|
gstp = "git stash pop";
|
|
gt = "git tag";
|
|
gts = "git tag -s";
|
|
|
|
d = "sudo docker";
|
|
dc = "sudo docker-compose";
|
|
dcu = "sudo docker-compose up";
|
|
dcd = "sudo docker-compose down";
|
|
dcp = "sudo docker-compose pull";
|
|
dcl = "sudo docker-compose logs";
|
|
|
|
y = "yarn";
|
|
ya = "yarn add";
|
|
yar = "yarn remove";
|
|
yi = "yarn init";
|
|
yin = "yarn install";
|
|
yu = "yarn upgrade-interactive";
|
|
|
|
v = "vagrant";
|
|
vu = "vagrant up";
|
|
vh = "vagrant halt";
|
|
vs = "vagrant ssh";
|
|
vp = "vagrant provision";
|
|
|
|
dl = "yt-dlp";
|
|
vol =
|
|
"amixer set 'Master'"; # Change the volume, e.g. vol 10%+, vol 10%-, vol 100%
|
|
copy = "xclip -sel clip <"; # Easily copy the contents of any file
|
|
cf = "tput reset"; # Clear the terminal completely
|
|
nf =
|
|
"tput reset; and neofetch --size 56%; and xdotool key --delay 100 Ctrl+Shift+Page_Up";
|
|
df = "df --human-readable --type=ext4 --total";
|
|
du = "du --human-readable --summarize";
|
|
jis =
|
|
"recode shift_jis..utf8"; # Easily convert shift_jis-encoded files to utf8
|
|
utf16 =
|
|
"recode utf16..utf8"; # Rarely, some files from Japan are utf16 instead
|
|
jp = "LANG=ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8";
|
|
|
|
a = "ansible-playbook";
|
|
b = "feh --bg-fill"; # Change the background
|
|
c = "clear"; # Because 5 letters is too much
|
|
e = "exit";
|
|
k = "kitty @ set-colors -c -a ~/.cache/wal/kitty";
|
|
l = "ls -l";
|
|
p = "paru";
|
|
r = "ranger";
|
|
w = "wal -o ~/.config/wal/done.sh";
|
|
T = "tree";
|
|
|
|
nano = "vim"; # The explanation is in the name
|
|
emacs = "vim"; # No need to start another operating system
|
|
};
|
|
|
|
time.timeZone = "America/New_York";
|
|
|
|
i18n.defaultLocale = "en_US.UTF-8";
|
|
i18n.supportedLocales =
|
|
[ "en_US.UTF-8/UTF-8" "ja_JP.UTF-8/UTF-8" "fr_FR.UTF-8/UTF-8" ];
|
|
|
|
services.xserver.enable = true;
|
|
services.xserver.desktopManager.gnome.enable = true;
|
|
programs.thunar.enable = true;
|
|
|
|
programs.starship.enable = true;
|
|
programs.neovim.enable = true;
|
|
programs.hyprland.enable = true;
|
|
programs.git.enable = true;
|
|
programs.firejail.enable = true;
|
|
|
|
nix.package = pkgs.nixFlakes;
|
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
|
environment.systemPackages = with pkgs; [
|
|
fluent-icon-theme
|
|
fluent-gtk-theme
|
|
maple-mono-NF
|
|
tmux
|
|
fish
|
|
wget
|
|
librewolf
|
|
kitty
|
|
mullvad-vpn
|
|
mullvad-browser
|
|
papirus-icon-theme
|
|
mediainfo
|
|
pywal
|
|
mpv
|
|
neofetch
|
|
anki
|
|
htop-vim
|
|
logseq
|
|
wl-clipboard
|
|
sox
|
|
spek
|
|
ripgrep
|
|
phinger-cursors
|
|
rsync
|
|
jq
|
|
keepassxc
|
|
feh
|
|
stow
|
|
lf
|
|
exa
|
|
fd
|
|
fzf
|
|
unar
|
|
gdu
|
|
ranger
|
|
nixfmt
|
|
whois
|
|
wofi
|
|
];
|
|
|
|
fonts.enableDefaultFonts = true;
|
|
fonts.fonts = with pkgs; [
|
|
noto-fonts
|
|
noto-fonts-cjk-sans
|
|
noto-fonts-cjk-serif
|
|
noto-fonts-emoji
|
|
hack-font
|
|
];
|
|
|
|
fonts.fontconfig = {
|
|
defaultFonts = {
|
|
serif = [ "Noto Serif CJK JP" "Noto Serif" ];
|
|
sansSerif = [ "Noto Sans CJK JP" "Noto Sans" ];
|
|
monospace = [ "Noto Mono CJK JP" "Noto Mono" ];
|
|
};
|
|
};
|
|
|
|
fonts.fontconfig.hinting.style = "hintfull";
|
|
|
|
i18n.inputMethod = {
|
|
enabled = "ibus";
|
|
ibus.engines = with pkgs.ibus-engines; [ anthy mozc ];
|
|
};
|
|
|
|
services.gnome.core-utilities.enable = false;
|
|
services.mullvad-vpn.enable = true;
|
|
services.mullvad-vpn.enableExcludeWrapper = false;
|
|
|
|
networking.networkmanager.wifi.macAddress = "random";
|
|
networking.networkmanager.ethernet.macAddress = "random";
|
|
services.resolved.llmnr = "false";
|
|
|
|
environment.defaultPackages = [ ];
|
|
environment.gnome.excludePackages = [ pkgs.gnome-tour ];
|
|
services.xserver.excludePackages = [ pkgs.xterm ];
|
|
services.gnome.gnome-online-accounts.enable = false;
|
|
services.gnome.gnome-user-share.enable = false;
|
|
services.gnome.tracker.enable = false;
|
|
services.gnome.tracker-miners.enable = false;
|
|
|
|
# Force containers to use mullvad
|
|
networking.nat.enable = true;
|
|
networking.nat.internalInterfaces = ["ve-+"];
|
|
networking.nat.externalInterface = "wg-mullvad";
|
|
|
|
services.interception-tools = {
|
|
enable = true;
|
|
plugins = [ pkgs.interception-tools-plugins.dual-function-keys ];
|
|
udevmonConfig = ''
|
|
- JOB: "${pkgs.interception-tools}/bin/intercept -g $DEVNODE | ${pkgs.interception-tools-plugins.dual-function-keys}/bin/dual-function-keys -c /etc/dual-function-keys.yaml | ${pkgs.interception-tools}/bin/uinput -d $DEVNODE"
|
|
DEVICE:
|
|
EVENTS:
|
|
EV_KEY: [KEY_CAPSLOCK, KEY_ESC]
|
|
'';
|
|
};
|
|
|
|
environment.etc."dual-function-keys.yaml".text = ''
|
|
TIMING:
|
|
- TAP_MILLISEC: 1000
|
|
- DOUBLE_TAP_MILLISEC: 0
|
|
MAPPINGS:
|
|
- KEY: KEY_CAPSLOCK
|
|
TAP: KEY_ESC
|
|
HOLD: KEY_LEFTCTRL
|
|
- KEY: KEY_SYSRQ
|
|
TAP: KEY_SYSRQ
|
|
HOLD: KEY_RIGHTMETA
|
|
'';
|
|
|
|
containers.test = let hostCfg = config;
|
|
in {
|
|
autoStart = true;
|
|
privateNetwork = true;
|
|
hostAddress = "192.168.100.10";
|
|
localAddress = "192.168.100.11";
|
|
|
|
bindMounts = {
|
|
waylandDisplay = rec {
|
|
hostPath = "/run/user/1000";
|
|
mountPoint = hostPath;
|
|
};
|
|
};
|
|
|
|
config = { config, pkgs, ... }: {
|
|
programs.fish.enable = true;
|
|
users.defaultUserShell = pkgs.fish;
|
|
environment.shells = with pkgs; [ fish ];
|
|
|
|
programs.npm.enable = true;
|
|
|
|
nix.package = pkgs.nixFlakes;
|
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
|
environment.systemPackages = with pkgs; [
|
|
p7zip
|
|
kitty
|
|
neovim
|
|
git
|
|
unzip
|
|
ripgrep
|
|
gcc
|
|
trashy
|
|
mullvad-browser
|
|
alacritty
|
|
logseq
|
|
feh
|
|
wget
|
|
exa
|
|
fd
|
|
fzf
|
|
gdu
|
|
ranger
|
|
wofi
|
|
lf
|
|
];
|
|
|
|
environment.variables = { TERM = "xterm-kitty"; };
|
|
|
|
environment.sessionVariables = {
|
|
# WAYLAND_DISPLAY = "wayland-0"; # GNOME+gdm
|
|
WAYLAND_DISPLAY = "wayland-1"; # Hyprland+sddm
|
|
QT_QPA_PLATFORM = "wayland";
|
|
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
|
SDL_VIDEODRIVER = "wayland";
|
|
CLUTTER_BACKEND = "wayland";
|
|
MOZ_ENABLE_WAYLAND = "1";
|
|
XDG_RUNTIME_DIR = "/run/user/1000";
|
|
# DISPLAY = ":0"; # GNOME+gdm
|
|
DISPLAY = ":1"; # Hyprland+sddm
|
|
};
|
|
|
|
services.xserver.enable = true;
|
|
|
|
hardware.opengl = {
|
|
enable = true;
|
|
extraPackages = hostCfg.hardware.opengl.extraPackages;
|
|
};
|
|
|
|
users.mutableUsers = false;
|
|
users.allowNoPasswordLogin = true;
|
|
|
|
users.users.user = {
|
|
isNormalUser = true;
|
|
home = "/home/user";
|
|
};
|
|
|
|
environment.defaultPackages = [ ];
|
|
system.stateVersion = "22.11";
|
|
};
|
|
};
|
|
|
|
system.stateVersion = "22.11";
|
|
}
|