Initial commit
This commit is contained in:
commit
a43b5a6a1a
7
flake.nix
Normal file
7
flake.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
{ description = "A few settings";
|
||||
outputs = _: {
|
||||
nixosModules = {
|
||||
voidcruiser = import ./modules/desktop;
|
||||
};
|
||||
};
|
||||
}
|
20
modules/audio.nix
Normal file
20
modules/audio.nix
Normal file
|
@ -0,0 +1,20 @@
|
|||
{ lib, config, ... }:
|
||||
with lib;
|
||||
let cfg = config.voidcruiser.audio;
|
||||
in {
|
||||
options.voidcruiser.audio = {
|
||||
enable = mkEnableOption "Enable all the audio daemons";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
sound.enable = true;
|
||||
hardware.pulseaudio.enable = false;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
wireplumber.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
12
modules/default.nix
Normal file
12
modules/default.nix
Normal file
|
@ -0,0 +1,12 @@
|
|||
{...}:{
|
||||
imports = [
|
||||
./audio.nix
|
||||
./font.nix
|
||||
./nix-settings.nix
|
||||
./nvidia.nix
|
||||
./services.nix
|
||||
./vim.nix
|
||||
./xconfig.nix
|
||||
./zsh.nix
|
||||
];
|
||||
}
|
82
modules/font.nix
Normal file
82
modules/font.nix
Normal file
|
@ -0,0 +1,82 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
let cfg = config.voidcruiser.fontConfig;
|
||||
in {
|
||||
options.voidcruiser.fontConfig = {
|
||||
enable = mkEnableOption "Enable opinionated font configuration";
|
||||
joyPixels = mkEnableOption "Enables the JoyPixels font";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
fonts = {
|
||||
fontDir.enable = true;
|
||||
packages = with pkgs; [
|
||||
(nerdfonts.override { fonts = [ "FiraCode" "Iosevka" ]; })
|
||||
jetbrains-mono
|
||||
iosevka
|
||||
fira-code
|
||||
fira
|
||||
font-awesome
|
||||
liberation_ttf
|
||||
libertine
|
||||
libertinus
|
||||
vollkorn
|
||||
noto-fonts-emoji
|
||||
noto-fonts
|
||||
ipafont
|
||||
bqn386
|
||||
blackout
|
||||
prociono
|
||||
mplus-outline-fonts.githubRelease
|
||||
mononoki
|
||||
uiua386
|
||||
];
|
||||
fontconfig = {
|
||||
enable = true;
|
||||
includeUserConf = true;
|
||||
antialias = true;
|
||||
hinting.enable = true;
|
||||
|
||||
defaultFonts = {
|
||||
serif = [ "Vollkorn" "Fira Code" "IPAMincho" "Noto Color Emoji" ];
|
||||
sansSerif = [ "FiraSans" "Fira Code" "IPAGothic" "Noto Color Emoji" ];
|
||||
monospace = [ "Fira Code" "JetBrains Mono" "Iosevka" "IPAGothic" "Noto Color Emoji" ];
|
||||
emoji = [ "Noto Color Emoji" (mkIf cfg.joyPixels "JoyPixels") ];
|
||||
};
|
||||
|
||||
localConf = ''
|
||||
<fontconfig>
|
||||
|
||||
<match target="scan">
|
||||
<test name="family">
|
||||
<string>APL385 Unicode</string>
|
||||
</test>
|
||||
<edit name="spacing">
|
||||
<int>100</int>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<match target="scan">
|
||||
<test name="family">
|
||||
<string>BQN386 Unicode</string>
|
||||
</test>
|
||||
<edit name="spacing">
|
||||
<int>100</int>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
<match target="scan">
|
||||
<test name="family">
|
||||
<string>Uiua386</string>
|
||||
</test>
|
||||
<edit name="spacing">
|
||||
<int>100</int>
|
||||
</edit>
|
||||
</match>
|
||||
|
||||
</fontconfig>
|
||||
'';
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
BIN
modules/images/city.png
Normal file
BIN
modules/images/city.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 MiB |
73
modules/misc/bqn
Normal file
73
modules/misc/bqn
Normal file
|
@ -0,0 +1,73 @@
|
|||
// XKB configuration file
|
||||
//
|
||||
// ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬─────────┐
|
||||
// │~ ¬ │! ⎉ │@ ⚇ │# ⍟ │$ ◶ │% ⊘ │^ ⎊ │& ⍎ │* ⍕ │( ⟨ │) ⟩ │_ √ │+ ⋆ │Backspace│
|
||||
// │` ˜ │1 ˘ │2 ¨ │3 ⁼ │4 ⌜ │5 ´ │6 ˝ │7 │8 ∞ │9 ¯ │0 • │- ÷ │= × │ │
|
||||
// ├────┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬──────┤
|
||||
// │Tab │Q ↙ │W 𝕎 │E ⍷ │R 𝕣 │T ⍋ │Y │U │I ⊑ │O ⊒ │P ⍳ │{ ⊣ │} ⊢ │| │
|
||||
// │ │q ⌽ │w 𝕨 │e ∊ │r ↑ │t ∧ │y │u ⊔ │i ⊏ │o ⊐ │p π │[ ← │] → │\ │
|
||||
// ├───────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴──────┤
|
||||
// │Caps │A ↖ │S 𝕊 │D │F 𝔽 │G 𝔾 │H « │J │K ⌾ │L » │: · │" ˙ │Enter │
|
||||
// │Lock │a ⍉ │s 𝕤 │d ↕ │f 𝕗 │g 𝕘 │h ⊸ │j ∘ │k ○ │l ⟜ │; ⋄ │' ↩ │ │
|
||||
// ├────────┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──┬─┴──────────┤
|
||||
// │Shift │Z ⋈ │X 𝕏 │C │V ⍒ │B ⌈ │N │M ≢ │< ≤ │> ≥ │? ⇐ │Shift │
|
||||
// │ │z ⥊ │x 𝕩 │c ↓ │v ∨ │b ⌊ │n │m ≡ │, ∾ │. ≍ │/ ≠ │ │
|
||||
// └───────────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────────────┘
|
||||
// Space: ‿
|
||||
|
||||
xkb_symbols "bqn" {
|
||||
name[Group1]= "bqn";
|
||||
|
||||
key <SPCE> { [ U0203F ] }; // space ‿
|
||||
key <TLDE> { [ U002DC, U000AC ] }; // `˜¬
|
||||
key <AE01> { [ U002D8, U02389 ] }; // 1˘⎉
|
||||
key <AE02> { [ U000A8, U02687 ] }; // 2¨⚇
|
||||
key <AE03> { [ U0207C, U0235F ] }; // 3⁼⍟
|
||||
key <AE04> { [ U0231C, U025F6 ] }; // 4⌜
|
||||
key <AE05> { [ U000B4, U02298 ] }; // 5´⊘
|
||||
key <AE06> { [ U002DD, U0238A ] }; // 6˝⎊
|
||||
key <AE07> { [ U000AF, U0234E ] }; // 7 ⍎
|
||||
key <AE08> { [ U0221E, U02355 ] }; // 8∞⍕
|
||||
key <AE09> { [ U000AF, U027E8 ] }; // 9¯⟨
|
||||
key <AE10> { [ U02022, U027E9 ] }; // 0•⟩
|
||||
key <AE11> { [ U000F7, U0221A ] }; // -÷√
|
||||
key <AE12> { [ U000D7, U022C6 ] }; // =×⋆
|
||||
|
||||
key <AD01> { [ U0233D, U02199 ] }; // Q⌽↙
|
||||
key <AD02> { [ U1D568, U1D54E ] }; // W𝕨𝕎
|
||||
key <AD03> { [ U0220A, U02377 ] }; // E∊⍷
|
||||
key <AD04> { [ U02191, U1D563 ] }; // R↑𝕣
|
||||
key <AD05> { [ U02227, U0234B ] }; // T∧⍋
|
||||
key <AD06> { [ ] }; // Y
|
||||
key <AD07> { [ U02294 ] }; // U⊔
|
||||
key <AD08> { [ U0228F, U02291 ] }; // I⊏⊑
|
||||
key <AD09> { [ U02290, U02292 ] }; // O⊐⊒
|
||||
key <AD10> { [ U003C0, U02373 ] }; // Pπ⍳
|
||||
key <AD11> { [ U02190, U022A3 ] }; // [←⊣
|
||||
key <AD12> { [ U02192, U022A2 ] }; // ]→⊢
|
||||
|
||||
key <AC01> { [ U02349, U02196 ] }; // A⍉↖
|
||||
key <AC02> { [ U1D564, U1D54A ] }; // S𝕤𝕊
|
||||
key <AC03> { [ U02195 ] }; // D↕
|
||||
key <AC04> { [ U1D557, U1D53D ] }; // F𝕗𝔽
|
||||
key <AC05> { [ U1D558, U1D53E ] }; // G𝕘𝔾
|
||||
key <AC06> { [ U022B8, U000AB ] }; // H⊸«
|
||||
key <AC07> { [ U02218 ] }; // J∘
|
||||
key <AC08> { [ U025CB, U0233E ] }; // K○⌾
|
||||
key <AC09> { [ U027DC, U000BB ] }; // L⟜»
|
||||
key <AC10> { [ U022C4, U000B7 ] }; // ;⋄·
|
||||
key <AC11> { [ U021A9, U002D9 ] }; // '↩˙
|
||||
key <AC12> { [ ] }; // /
|
||||
|
||||
key <AB01> { [ U0294A, U022C8 ] }; // Z⥊⋈
|
||||
key <AB02> { [ U1D569, U1D54F ] }; // X𝕩𝕏
|
||||
key <AB03> { [ U02193 ] }; // C↓
|
||||
key <AB04> { [ U02228, U02352 ] }; // V∨⍒
|
||||
key <AB05> { [ U0230A, U02308 ] }; // B⌊⌈
|
||||
key <AB06> { [ ] }; // N
|
||||
key <AB07> { [ U02261, U02262 ] }; // M≡≢
|
||||
key <AB08> { [ U0223E, U02264 ] }; // ,∾≤
|
||||
key <AB09> { [ U0224D, U02265 ] }; // .≍≥
|
||||
key <AB10> { [ U02260, U021D0 ] }; // /≠⇐
|
||||
key <LSGT> { [ U02264, U02265 ] }; // <≤≥
|
||||
};
|
41
modules/nix-settings.nix
Normal file
41
modules/nix-settings.nix
Normal file
|
@ -0,0 +1,41 @@
|
|||
{ lib, config, ... }:
|
||||
with lib;
|
||||
let cfg = config.nixSettings;
|
||||
in {
|
||||
options.nixSettings = {
|
||||
gc = {
|
||||
automatic = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Enables automatic garbage collection";
|
||||
};
|
||||
dates = mkOption {
|
||||
type = types.str;
|
||||
default = "weekly";
|
||||
example = "03:15";
|
||||
description = mdDoc ''
|
||||
How often or when garbage collection is performed. For most desktop and server systems
|
||||
a sufficient garbage collection is once a week.
|
||||
|
||||
The format is described in
|
||||
{manpage}`systemd.time(7)`.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
config = {
|
||||
nix = {
|
||||
settings = {
|
||||
trusted-users = [
|
||||
"root"
|
||||
"@wheel"
|
||||
];
|
||||
};
|
||||
gc = {
|
||||
automatic = cfg.gc.automatic;
|
||||
dates = cfg.gc.dates;
|
||||
};
|
||||
settings.experimental-features = [ "flakes" "nix-command" ];
|
||||
};
|
||||
};
|
||||
}
|
27
modules/nvidia.nix
Normal file
27
modules/nvidia.nix
Normal file
|
@ -0,0 +1,27 @@
|
|||
{ lib, config, ... }:
|
||||
with lib;
|
||||
let cfg = config.voidcruiser.nvidia;
|
||||
in {
|
||||
options.voidcruiser.nvidia = {
|
||||
enable = mkEnableOption "Enables proprietary Nvidia drivers and related config";
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
hardware = {
|
||||
opengl = {
|
||||
enable = true;
|
||||
driSupport = true;
|
||||
driSupport32Bit = true;
|
||||
};
|
||||
nvidia = {
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
powerManagement = {
|
||||
enable = false;
|
||||
finegrained = false;
|
||||
};
|
||||
open = false;
|
||||
nvidiaSettings = true;
|
||||
};
|
||||
};
|
||||
services.xserver.videoDrivers = ["nvidia"];
|
||||
};
|
||||
}
|
114
modules/services.nix
Normal file
114
modules/services.nix
Normal file
|
@ -0,0 +1,114 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
with lib;
|
||||
let cfg = config.voidcruiser.services;
|
||||
in {
|
||||
options.voidcruiser.services = {
|
||||
|
||||
flatpak = {
|
||||
enable = mkEnableOption "Enables basic flatpak configuration";
|
||||
};
|
||||
|
||||
yggdrasil = {
|
||||
enable = mkEnableOption "Enables opinionated Yggdrasil configuration";
|
||||
persistentKeys = mkEnableOption "Prevents keys from being randomised";
|
||||
};
|
||||
|
||||
i2p = {
|
||||
enable = mkEnableOption "Enables opinionated i2p container config";
|
||||
autoStart = mkEnableOption "Enables autostart for container";
|
||||
};
|
||||
|
||||
ssh = {
|
||||
enable = mkEnableOption "Enables opinionated ssh config";
|
||||
passwordLogin = mkEnableOption "Enables password login";
|
||||
};
|
||||
|
||||
};
|
||||
config = {
|
||||
|
||||
# flatpak
|
||||
|
||||
xdg.portal = mkIf cfg.flatpak.enable {
|
||||
enable = true;
|
||||
wlr.enable = true;
|
||||
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||
config.common.default = "*";
|
||||
};
|
||||
|
||||
# ssh
|
||||
|
||||
programs.ssh = mkIf cfg.ssh.enable {
|
||||
startAgent = true;
|
||||
};
|
||||
|
||||
services = {
|
||||
|
||||
# flatpak
|
||||
|
||||
flatpak.enable = cfg.flatpak.enable;
|
||||
dbus.enable = cfg.flatpak.enable;
|
||||
|
||||
# yggdrasil
|
||||
|
||||
yggdrasil = mkIf cfg.yggdrasil.enable {
|
||||
enable = true;
|
||||
persistentKeys = cfg.yggdrasil.persistentKeys;
|
||||
settings = {
|
||||
Peers = [
|
||||
"tls://109.107.173.235:9111"
|
||||
"tls://94.103.82.150:8080"
|
||||
"tcp://vpn.itrus.su:7991"
|
||||
"tls://45.147.198.155:6010"
|
||||
"tcp://ygg-nl.incognet.io:8883"
|
||||
"tls://ygg-nl.incognet.io:8884"
|
||||
"tls://23.137.249.65:443"
|
||||
"tls://aaoth.xyz:25565"
|
||||
"tcp://aaoth.xyz:7777"
|
||||
"tls://23.137.251.45:5222"
|
||||
"tls://x-ams-0.sergeysedoy97.ru:65535"
|
||||
"tls://s-ams-0.sergeysedoy97.ru:65535"
|
||||
"tls://89.22.237.91:65535"
|
||||
"tls://[2a0d:8480:1:f9::]:65535"
|
||||
"tls://x-ams-1.sergeysedoy97.ru:65535"
|
||||
"tls://s-ams-1.sergeysedoy97.ru:65535"
|
||||
"tls://79.137.194.94:65535"
|
||||
];
|
||||
};
|
||||
};
|
||||
openssh = mkIf cfg.ssh.enable {
|
||||
enable = true;
|
||||
settings = {
|
||||
PasswordAuthentication = cfg.ssh.passwordLogin;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# i2p container
|
||||
|
||||
containers.i2pd-container = mkIf cfg.i2p.enable {
|
||||
autoStart = cfg.i2p.autoStart;
|
||||
config = {
|
||||
system.stateVersion = "23.11"; # Did you read the comment?
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
7656
|
||||
7070
|
||||
4447
|
||||
4444
|
||||
];
|
||||
|
||||
services.i2pd = {
|
||||
enable = true;
|
||||
address = "127.0.0.1";
|
||||
proto = {
|
||||
socksProxy.enable = true;
|
||||
httpProxy.enable = true;
|
||||
http.enable = true;
|
||||
sam.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
64
modules/vim.nix
Normal file
64
modules/vim.nix
Normal file
|
@ -0,0 +1,64 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
with lib;
|
||||
let cfg = config.voidcruiser.vim;
|
||||
in {
|
||||
options.voidcruiser.vim = {
|
||||
enable = mkEnableOption "Enables opinionated vim configuration";
|
||||
enableNvim = mkEnableOption "Enables neovim and alias";
|
||||
setEnvVar = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Set 'vim' as $EDITOR
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
programs.nano.enable = false;
|
||||
|
||||
environment = {
|
||||
|
||||
variables = mkIf cfg.setEnvVar { EDITOR = "vim"; };
|
||||
|
||||
systemPackages = with pkgs; [
|
||||
|
||||
(mkIf cfg.enableNvim (neovim.override { vimAlias = true; }))
|
||||
|
||||
((vim_configurable.override { }).customize {
|
||||
name = "vim";
|
||||
vimrcConfig = {
|
||||
packages.myplugs = with pkgs.vimPlugins; {
|
||||
start = [ vim-nix ];
|
||||
opt = [];
|
||||
};
|
||||
customRC = ''
|
||||
syntax on
|
||||
set nocompatible
|
||||
set ignorecase
|
||||
set hlsearch
|
||||
set incsearch
|
||||
set autoindent
|
||||
set smartindent
|
||||
set wildmenu
|
||||
set expandtab
|
||||
set shiftwidth=4
|
||||
set tabstop=4
|
||||
set number
|
||||
set relativenumber
|
||||
set mouse=
|
||||
set listchars=tab:│\ ,trail:·
|
||||
set list
|
||||
set scrolloff=3
|
||||
set notimeout
|
||||
set backspace=2
|
||||
au FileType nix setlocal shiftwidth=2 tabstop=2 expandtab
|
||||
au FileType haskell,tex setlocal shiftwidth=4 tabstop=4 expandtab
|
||||
'';
|
||||
};
|
||||
})
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
68
modules/xconfig.nix
Normal file
68
modules/xconfig.nix
Normal file
|
@ -0,0 +1,68 @@
|
|||
{ config, lib, ... }:
|
||||
with lib;
|
||||
let cfg = config.voidcruiser.xconfig;
|
||||
in {
|
||||
options.voidcruiser.xconfig = {
|
||||
|
||||
enable = mkEnableOption "Enables opinionated xorg config";
|
||||
|
||||
bqn.enable = mkEnableOption "Enables bqn layout";
|
||||
|
||||
touchpad.enableProperConfig = mkEnableOption "Enable the only correct touchpad settings";
|
||||
|
||||
mouse.accelProfile = mkOption {
|
||||
type = types.enum [ "flat" "adaptive" ];
|
||||
default = "flat";
|
||||
example = "adaptive";
|
||||
description = ''
|
||||
Use addaptive on trackball and touchpad; and flat on any normal mouse.
|
||||
'';
|
||||
};
|
||||
|
||||
displayManager.background = mkOption {
|
||||
default = ./images/city.png;
|
||||
type = types.path;
|
||||
description = ''
|
||||
Display manager background.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
services.xserver = {
|
||||
|
||||
extraLayouts.bqn = mkIf cfg.bqn.enable {
|
||||
description = "BQN layout";
|
||||
languages = [ "bqn" ];
|
||||
symbolsFile = ./misc/bqn;
|
||||
};
|
||||
layout = (if cfg.bqn.enable then "us,bqn" else "us");
|
||||
xkbOptions = mkIf cfg.bqn.enable "grp:switch";
|
||||
|
||||
enable = true;
|
||||
autoRepeatDelay = 250;
|
||||
autoRepeatInterval = 30;
|
||||
windowManager = {
|
||||
windowmaker.enable = true;
|
||||
xmonad.enable = true;
|
||||
};
|
||||
displayManager.lightdm = {
|
||||
enable = true;
|
||||
greeters.gtk.enable = true;
|
||||
background = cfg.displayManager.background;
|
||||
};
|
||||
libinput = {
|
||||
mouse = {
|
||||
accelProfile = cfg.mouse.accelProfile;
|
||||
middleEmulation = false;
|
||||
};
|
||||
touchpad = mkIf cfg.touchpad.enableProperConfig {
|
||||
tapping = false;
|
||||
disableWhileTyping = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
42
modules/zsh.nix
Normal file
42
modules/zsh.nix
Normal file
|
@ -0,0 +1,42 @@
|
|||
{ config, lib, ... }:
|
||||
with lib;
|
||||
let cfg = config.voidcruiser.zsh;
|
||||
in {
|
||||
options.voidcruiser.zsh = {
|
||||
enable = mkEnableOption "Enables opinionated zsh configuration";
|
||||
skim.enable = mkEnableOption "Enables skim support for shell history";
|
||||
highlightStyle = mkOption {
|
||||
type = types.str;
|
||||
default = "fg=magenta,bg=black,bold,underline";
|
||||
description = ''
|
||||
Colors for zsh autosuggestions. Check the documentation for more info.
|
||||
'';
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
programs = {
|
||||
skim.keybindings = cfg.skim.enable;
|
||||
zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
autosuggestions = {
|
||||
enable = true;
|
||||
highlightStyle = cfg.highlightStyle;
|
||||
async = true;
|
||||
};
|
||||
syntaxHighlighting = {
|
||||
enable = true;
|
||||
};
|
||||
shellAliases = {
|
||||
ls = "ls --color=tty";
|
||||
l = "ls -lah";
|
||||
la = "ls -a";
|
||||
lr = "ls -rt";
|
||||
llr = "ls -lhrt";
|
||||
llar = "ls -lhArt";
|
||||
grep = "grep --color=auto";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue