Compare commits

..

105 Commits

Author SHA1 Message Date
1d2fa7f3e6 eyezoom change 2024-10-23 14:47:52 +02:00
c19c4058b1 no sens change 2024-10-18 21:32:13 +02:00
b56cec8762 fix eyezoom not caring about mouse var 2024-10-18 21:00:14 +02:00
b0caae1a47 float spectacle 2024-10-17 15:36:57 +02:00
d1cd6216d5 config system 2024-10-17 15:23:31 +02:00
1141408b14 nice bar 2024-10-17 14:44:15 +02:00
ecd47a0c48 fix slock bind 2024-10-17 02:42:55 +02:00
71ef0c124f wezterm colors 2024-10-17 02:40:09 +02:00
0da764f729 picom 2024-10-17 02:32:29 +02:00
df3f846061 yeag 2024-10-17 02:24:17 +02:00
f8a5302e8d more binds and screen locker 2024-10-17 01:45:43 +02:00
0ba698ea44 fix some binds 2024-10-17 00:14:47 +02:00
9909c4d5fd moving keybinds into i3 2024-10-16 23:57:18 +02:00
80bc754466 basic i3 binds 2024-10-16 19:57:06 +02:00
223c156b21 colors 2024-10-16 19:34:52 +02:00
ded7406ee6 basic i3 in kde setup 2024-10-16 19:22:49 +02:00
6450344ae2 -slippi netplay 2024-10-16 14:35:52 +02:00
cccdcaea5e update nixpkgs 2024-10-16 13:27:24 +02:00
aaf67349a5 add new mouse name 2024-10-13 21:37:11 +02:00
fd1bf99e60 eyezoom res 2024-10-13 21:04:23 +02:00
030d01f4cb 144hz fix 2024-10-11 20:16:48 +02:00
92c16f8164 virt manager 2024-10-06 11:33:12 +02:00
0cd689a3c6 add pash to user env 2024-10-05 15:08:00 +02:00
2637a8e5c9 use accel instead of transform to fix kde issue 2024-09-24 18:12:16 +02:00
278fd3a72a zoom macro sens change 2024-09-24 17:43:56 +02:00
374ff56179 resizing generalized 2024-09-24 14:40:11 +02:00
eec0d7e3b7 add wide zoom 2024-09-24 12:40:56 +02:00
acab4ef1e3 graalvm 2024-09-23 22:34:06 +02:00
00837044ea applications 2024-09-23 22:22:34 +02:00
e5aca17571 transient system 2024-09-18 16:58:14 +02:00
8c4d4b911c fix 2024-09-15 19:52:52 +02:00
3a6561da03 eyezoom 2024-09-15 19:45:05 +02:00
ba01b9417a add bottom to applications 2024-09-12 20:02:17 +02:00
280a4230e7 add git repo option 2024-09-11 14:36:30 +02:00
fa9d50bca6 update readme 2024-09-11 14:30:28 +02:00
1afc1fc510 eza 2024-09-11 13:53:29 +02:00
619599562b cornelis rebind 2024-09-05 10:21:59 +02:00
1ca16582c3 direnv logs 2024-08-29 00:46:53 +02:00
7b29c79851 dont share shell history 2024-08-29 00:28:29 +02:00
dce4b24475 fix vim mode indicator not working 2024-08-28 18:22:53 +02:00
07b9e2f950 tidier nix thingies 2024-08-27 17:00:16 +02:00
a3cf550f0b fuzzy find 2024-08-27 15:10:25 +02:00
43564d0f32 shell stuff 2024-08-27 14:30:48 +02:00
639e484dcf mouse fix 2024-08-26 15:43:01 +02:00
18527f0f3a mouse settings 2024-08-25 17:53:55 +02:00
923cf653ff agda bump 2024-08-23 22:07:47 +02:00
47b35640dc shell fixes 2024-08-22 22:03:04 +02:00
274576f829 fix fastfetch 2024-08-22 22:02:54 +02:00
fd3f4a7a64 zsh :3 2024-08-22 21:07:47 +02:00
8ef63b0d86 oops 2024-08-21 13:52:36 +02:00
54fa622c0b wezterm 2024-08-21 13:39:57 +02:00
c9794d60cd hls 2024-08-20 16:17:13 +02:00
abce9ffc03 kdenlive 2024-07-29 12:06:51 +02:00
6aeadc9e19 bump plasma manager 2024-07-27 22:44:09 +02:00
e10331eeb6 plasma manager enable overrideConfig 2024-07-27 13:37:52 +02:00
8416d0499d make desktop file work for protonmail desktop 2024-07-26 18:23:09 +02:00
8fb3ddb0d7 protonmail desktop 2024-07-26 18:21:36 +02:00
d8d088710b protonmail desktop 2024-07-26 17:49:49 +02:00
360c718bef bump plasma manager 2024-07-16 17:10:57 +02:00
4bd46ab834 vue and typescript lsp 2024-07-13 23:37:00 +02:00
a457100930 revert silly 2024-07-12 13:30:11 +02:00
4965c32923 no more lix 2024-07-12 13:11:21 +02:00
afee0184a3 do not trust cpu for rand computational 2024-07-12 13:08:00 +02:00
fe5654ceec lix 2024-07-10 19:10:18 +02:00
1e0dc4783f shell functions for running and creating shells 2024-07-09 18:16:28 +02:00
21fe9aee0e mjau 2024-07-09 17:21:17 +02:00
df0eb6c347 nixprof 2024-07-03 19:13:15 +02:00
75c8b5aa73 makar 2024-07-03 18:36:58 +02:00
a6f591f6e0 wallpaper 2024-06-25 16:01:07 +02:00
5708f39308 less agressive plasma manager 2024-06-25 15:40:04 +02:00
2a8d033f7d bump flake 2024-06-25 13:57:09 +02:00
791d65a78d plasma manager 2024-06-25 12:11:51 +02:00
24adf1ad54 more refactor 2024-06-24 22:35:21 +02:00
ac03747210 fix shell menu actually being a vim plugin 2024-06-24 22:00:24 +02:00
1c7f146259 no nonbreaking space on altgr + space 2024-06-24 21:54:46 +02:00
fac169231c refactor :) 2024-06-24 21:53:35 +02:00
242ec70992 unstable in registry 2024-06-24 18:19:10 +02:00
6b52d58f2e vcv-rack 2024-06-18 11:57:43 +02:00
68b182d441 org mode update 2024-06-04 15:14:58 +02:00
ecddf44de4 fix pipewire conf 2024-06-04 14:23:11 +02:00
ceedbfdddb alacritty fix 2024-06-04 00:34:58 +02:00
9467e4cb8a 24.05 2024-06-04 00:26:34 +02:00
7f19d4efe9 mjau 2024-05-30 20:55:19 +02:00
259c7dc997 remove server config from repo 2024-05-23 10:51:25 +02:00
5096001fcf medly 2024-05-22 21:30:27 +02:00
8fd99939c0 port 2024-05-22 18:19:22 +02:00
f2861e7342 ssh mjau 2024-05-22 12:55:02 +02:00
3cab3de672 secret management fix 2024-05-19 11:55:35 +02:00
554f5c20af git crypted config 2024-05-19 11:43:00 +02:00
a984ec4efb git-crypt test 2024-05-19 11:41:19 +02:00
3d6e1c7bba Add 1 git-crypt collaborator
New collaborators:

	EDAD6D71 depsterr@protonmail.com
2024-05-19 11:38:50 +02:00
57604c28cc renoise 2024-05-19 11:04:06 +02:00
e432f33c9a secrets template 2024-05-19 10:54:41 +02:00
2b1870743f gitignore 2024-05-04 12:20:46 +02:00
0983ba366c oops 2024-05-04 12:19:10 +02:00
82c9d361a0 zelda 2024-05-04 12:17:17 +02:00
d598e458cd mjau eta things 2024-04-26 15:21:28 +02:00
1451f3de8b alt shift switch layout 2024-04-23 17:26:39 +02:00
e51088400f add unstable packages 2024-04-19 15:24:00 +02:00
5b15769ad5 ocamllsp 2024-04-19 15:17:01 +02:00
1de7b6e5b9 update lock 2024-04-19 15:16:45 +02:00
0ac0bec82e formatting 2024-04-19 15:16:30 +02:00
b617893d5b clangd 2024-04-19 15:16:12 +02:00
2849687eed oops 2024-04-19 15:15:24 +02:00
a7f1a8f845 lualine 2024-04-19 15:13:55 +02:00
62 changed files with 1828 additions and 1539 deletions

4
.git-crypt/.gitattributes vendored Normal file
View File

@ -0,0 +1,4 @@
# Do not edit this file. To specify the files to encrypt, create your own
# .gitattributes file in the directory where your files are.
* !filter !diff
*.gpg binary

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
secrets/** filter=git-crypt diff=git-crypt
.gitattributes !filter !diff

View File

@ -1,28 +0,0 @@
{ config, pkgs, ... }:
{
services.gitea = {
enable = true;
appName = "My awesome Gitea server"; # Give the site a name
database = {
type = "sqlite3";
};
settings.server = {
DOMAIN = "localhost";
ROOT_URL = "http://localhost/";
HTTP_PORT = 3001;
};
};
# [CONTAINER]
boot.isContainer = true;
# [NETWORK]
networking.hostName = "gitea";
networking.useDHCP = false;
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [ 3001 ];
networking.firewall.allowedUDPPorts = [ ];
system.stateVersion = "23.11";
}

View File

@ -1,62 +0,0 @@
{ pkgs, ... }:
let gitea = {
host = "10.10.0.1";
local = "10.10.0.2";
};
in
{
# [CONTAINERS]
containers.gitea = {
autoStart = true;
ephemeral = true;
privateNetwork = true;
hostAddress = gitea.host;
localAddress = gitea.local;
config = ./gitea.nix;
};
# [NGINX]
services.nginx = {
enable = true;
recommendedProxySettings = true;
virtualHosts = {
"localhost" = {
locations."/".proxyPass = "http://${gitea.local}:3001";
};
};
};
# [NETWORK]
networking.firewall.allowedTCPPorts = [ 80 ];
networking.firewall.allowedUDPPorts = [ ];
# VM test user
users.users.test.isSystemUser = true ;
users.users.test.initialPassword = "test";
users.users.test.group = "test";
users.groups.test = {};
console = {
useXkbConfig = true;
};
services.xserver = {
xkb = {
layout = "fox,sus";
options = "ctrl:nocaps";
extraLayouts.sus = {
description = "Swedish US";
languages = [ "se" ];
symbolsFile = ../shared/sus.xkb;
};
extraLayouts.fox = {
description = "Layout suitable to be used by a fox";
languages = [ "se" ];
symbolsFile = ../shared/fox.xkb;
};
};
};
system.stateVersion = "23.11";
}

View File

@ -1,59 +0,0 @@
{ config, pkgs, ... }:
{
# [HARDWARE]
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
# [BOOT]
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.swraid.enable = true;
boot.swraid.mdadmConf = ''
ARRAY /dev/md/deppyPC:0 level=raid0 num-devices=2 metadata=1.2 name=deppyPC:0 UUID=ba6fef6e:972796a3:a331c87a:2d973f91
devices=/dev/sda1,/dev/sdb1
'';
# [AUDIO]
environment.etc."pipewire/media-session.d/alsa-monitor.con".text = ''
enabled = true
rules = {
{
matches = [
{
node.name = "alsa_output.usb-SMSL_SMSL_USB_AUDIO-00.analog-stereo"
}
]
actions = {
update-props = {
audio.format = "S32_LE"
}
}
},
}
'';
environment.etc."pipewire/pipewire.conf".text = builtins.readFile ./pipewire.conf;
# [DESKTOP / XORG / WAYLAND]
services.xserver = {
desktopManager.plasma5.enable = true;
displayManager.startx.enable = true;
};
# [NETWORKING]
networking.hostName = "computational";
networking.networkmanager.enable = true;
system.stateVersion = "23.11";
}

View File

@ -1,308 +0,0 @@
context.properties = {
## Configure properties in the system.
#library.name.system = support/libspa-support
#context.data-loop.library.name.system = support/libspa-support
#support.dbus = true
#link.max-buffers = 64
link.max-buffers = 16 # version < 3 clients can't handle more
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#clock.power-of-two-quantum = true
#log.level = 2
#cpu.zero.denormals = false
core.daemon = true # listening for socket connections
core.name = pipewire-0 # core name and socket name
## Properties for the DSP configuration.
# default.clock.rate = 48000
default.clock.allowed-rates = [ 44100 48000 88200 96000, 176400 192000 352800 384000 705600 768000 ]
default.clock.quantum = 1024
default.clock.min-quantum = 128
default.clock.max-quantum = 2048
#default.clock.quantum-limit = 8192
#default.video.width = 640
#default.video.height = 480
#default.video.rate.num = 25
#default.video.rate.denom = 1
#
#settings.check-quantum = false
#settings.check-rate = false
#
# These overrides are only applied when running in a vm.
vm.overrides = {
default.clock.min-quantum = 1024
}
# keys checked below to disable module loading
module.x11.bell = true
# enables autoloading of access module, when disabled an alternative
# access module needs to be loaded.
module.access = true
# enables autoloading of module-jackdbus-detect
module.jackdbus-detect = true
}
context.spa-libs = {
#<factory-name regex> = <library-name>
#
# Used to find spa factory names. It maps an spa factory name
# regular expression to a library name that should contain
# that factory.
#
audio.convert.* = audioconvert/libspa-audioconvert
avb.* = avb/libspa-avb
api.alsa.* = alsa/libspa-alsa
api.v4l2.* = v4l2/libspa-v4l2
api.libcamera.* = libcamera/libspa-libcamera
api.bluez5.* = bluez5/libspa-bluez5
api.vulkan.* = vulkan/libspa-vulkan
api.jack.* = jack/libspa-jack
support.* = support/libspa-support
#videotestsrc = videotestsrc/libspa-videotestsrc
#audiotestsrc = audiotestsrc/libspa-audiotestsrc
}
context.modules = [
#{ name = <module-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( ifexists ) ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Loads a module with the given parameters.
# If ifexists is given, the module is ignored when it is not found.
# If nofail is given, module initialization failures are ignored.
# If condition is given, the module is loaded only when the context
# properties all match the match rules.
#
# Uses realtime scheduling to boost the audio thread priorities. This uses
# RTKit if the user doesn't have permission to use regular realtime
# scheduling. You can also clamp utilisation values to improve scheduling
# on embedded and heterogeneous systems, e.g. Arm big.LITTLE devices.
{ name = libpipewire-module-rt
args = {
nice.level = -11
#rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
#uclamp.min = 0
#uclamp.max = 1024
}
flags = [ ifexists nofail ]
}
# The native communication protocol.
{ name = libpipewire-module-protocol-native
args = {
# List of server Unix sockets, and optionally permissions
#sockets = [ { name = "pipewire-0" }, { name = "pipewire-0-manager" } ]
}
}
# The profile module. Allows application to access profiler
# and performance data. It provides an interface that is used
# by pw-top and pw-profiler.
{ name = libpipewire-module-profiler }
# Allows applications to create metadata objects. It creates
# a factory for Metadata objects.
{ name = libpipewire-module-metadata }
# Creates a factory for making devices that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-device-factory }
# Creates a factory for making nodes that run in the
# context of the PipeWire server.
{ name = libpipewire-module-spa-node-factory }
# Allows creating nodes that run in the context of the
# client. Is used by all clients that want to provide
# data to PipeWire.
{ name = libpipewire-module-client-node }
# Allows creating devices that run in the context of the
# client. Is used by the session manager.
{ name = libpipewire-module-client-device }
# The portal module monitors the PID of the portal process
# and tags connections with the same PID as portal
# connections.
{ name = libpipewire-module-portal
flags = [ ifexists nofail ]
}
# The access module can perform access checks and block
# new clients.
{ name = libpipewire-module-access
args = {
# Socket-specific access permissions
#access.socket = { pipewire-0 = "default", pipewire-0-manager = "unrestricted" }
# Deprecated legacy mode (not socket-based),
# for now enabled by default if access.socket is not specified
#access.legacy = true
}
condition = [ { module.access = true } ]
}
# Makes a factory for wrapping nodes in an adapter with a
# converter and resampler.
{ name = libpipewire-module-adapter }
# Makes a factory for creating links between ports.
{ name = libpipewire-module-link-factory }
# Provides factories to make session manager objects.
{ name = libpipewire-module-session-manager }
# Use libcanberra to play X11 Bell
{ name = libpipewire-module-x11-bell
args = {
#sink.name = ""
#sample.name = "bell-window-system"
#x11.display = null
#x11.xauthority = null
}
flags = [ ifexists nofail ]
condition = [ { module.x11.bell = true } ]
}
{ name = libpipewire-module-jackdbus-detect
args = {
#jack.library = libjack.so.0
#jack.server = null
#jack.client-name = PipeWire
#jack.connect = true
#tunnel.mode = duplex # source|sink|duplex
source.props = {
#audio.channels = 2
#midi.ports = 1
#audio.position = [ FL FR ]
# extra sink properties
}
sink.props = {
#audio.channels = 2
#midi.ports = 1
#audio.position = [ FL FR ]
# extra sink properties
}
}
flags = [ ifexists nofail ]
condition = [ { module.jackdbus-detect = true } ]
}
]
context.objects = [
#{ factory = <factory-name>
# ( args = { <key> = <value> ... } )
# ( flags = [ ( nofail ) ] )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Creates an object from a PipeWire factory with the given parameters.
# If nofail is given, errors are ignored (and no object is created).
# If condition is given, the object is created only when the context properties
# all match the match rules.
#
#{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc "Spa:Pod:Object:Param:Props:patternType" = 1 } }
#{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] }
#{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } }
#{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } }
#{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc } }
#{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } }
# A default dummy driver. This handles nodes marked with the "node.always-driver"
# property when no other driver is currently active. JACK clients need this.
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Dummy-Driver
node.group = pipewire.dummy
priority.driver = 20000
#clock.id = monotonic # realtime | tai | monotonic-raw | boottime
#clock.name = "clock.system.monotonic"
}
}
{ factory = spa-node-factory
args = {
factory.name = support.node.driver
node.name = Freewheel-Driver
priority.driver = 19000
node.group = pipewire.freewheel
node.freewheel = true
}
}
# This creates a new Source node. It will have input ports
# that you can link, to provide audio for this source.
#{ factory = adapter
# args = {
# factory.name = support.null-audio-sink
# node.name = "my-mic"
# node.description = "Microphone"
# media.class = "Audio/Source/Virtual"
# audio.position = "FL,FR"
# }
#}
# This creates a single PCM source device for the given
# alsa device path hw:0. You can change source to sink
# to make a sink in the same way.
#{ factory = adapter
# args = {
# factory.name = api.alsa.pcm.source
# node.name = "alsa-source"
# node.description = "PCM Source"
# media.class = "Audio/Source"
# api.alsa.path = "hw:0"
# api.alsa.period-size = 1024
# api.alsa.headroom = 0
# api.alsa.disable-mmap = false
# api.alsa.disable-batch = false
# audio.format = "S16LE"
# audio.rate = 48000
# audio.channels = 2
# audio.position = "FL,FR"
# }
#}
# Use the metadata factory to create metadata and some default values.
#{ factory = metadata
# args = {
# metadata.name = my-metadata
# metadata.values = [
# { key = default.audio.sink value = { name = somesink } }
# { key = default.audio.source value = { name = somesource } }
# ]
# }
#}
]
context.exec = [
#{ path = <program-name>
# ( args = "<arguments>" )
# ( condition = [ { <key> = <value> ... } ... ] )
#}
#
# Execute the given program with arguments.
# If condition is given, the program is executed only when the context
# properties all match the match rules.
#
# You can optionally start the session manager here,
# but it is better to start it as a systemd service.
# Run the session manager with -h for options.
#
#{ path = "/nix/store/n5azqf4qgng00pzdw0xzg7dqjfvsfcgs-pipewire-0.3.85/bin/pipewire-media-session" args = ""
# condition = [ { exec.session-manager = null } { exec.session-manager = true } ] }
#
# You can optionally start the pulseaudio-server here as well
# but it is better to start it as a systemd service.
# It can be interesting to start another daemon here that listens
# on another address with the -a option (eg. -a tcp:4713).
#
#{ path = "/nix/store/n5azqf4qgng00pzdw0xzg7dqjfvsfcgs-pipewire-0.3.85/bin/pipewire" args = "-c pipewire-pulse.conf"
# condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] }
]

View File

@ -2,22 +2,22 @@
"nodes": { "nodes": {
"agda": { "agda": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-parts": "flake-parts",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1701366566, "lastModified": 1723809509,
"narHash": "sha256-B8Jmjld0gGbkVO08GsovVqrUXCs8VfJ8UdM3sjHnzgM=", "narHash": "sha256-aC0Vc/YV+rodv1qG839rqNFBqoqy/AkgvLdHxymCIu4=",
"owner": "agda", "owner": "agda",
"repo": "agda", "repo": "agda",
"rev": "4293e0a94d15acac915ab9088b2ec028f78d14a9", "rev": "df1a26d96683ebb06aa8476e4af6bbeddf23efbe",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "agda", "owner": "agda",
"ref": "v2.6.4.1", "ref": "v2.7.0",
"repo": "agda", "repo": "agda",
"type": "github" "type": "github"
} }
@ -25,17 +25,17 @@
"cornelis": { "cornelis": {
"inputs": { "inputs": {
"flake-compat": "flake-compat", "flake-compat": "flake-compat",
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils",
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
] ]
}, },
"locked": { "locked": {
"lastModified": 1712595875, "lastModified": 1715930772,
"narHash": "sha256-KaAhKeESwOQ0R0vxeAO/CDPiPimiemoARyr0uIVTQ4w=", "narHash": "sha256-gP32IWxjIApK0jxQn3Xorul5SXtMS2tq+K8Wj8afHgg=",
"owner": "isovector", "owner": "isovector",
"repo": "cornelis", "repo": "cornelis",
"rev": "9d3347e7d8589a28bcdd283001367d60bacf6b05", "rev": "06d6020eed1a3520bb2887337dd5b27b1755968b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -60,22 +60,25 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils": { "flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": { "locked": {
"lastModified": 1678901627, "lastModified": 1722555600,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", "narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=",
"owner": "numtide", "owner": "hercules-ci",
"repo": "flake-utils", "repo": "flake-parts",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", "rev": "8471fe90ad337a8074e957b69ca4d0089218391d",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "numtide", "owner": "hercules-ci",
"repo": "flake-utils", "repo": "flake-parts",
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"
}, },
@ -93,6 +96,39 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"locked": {
"lastModified": 1678901627,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -100,94 +136,119 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1712386041, "lastModified": 1718530513,
"narHash": "sha256-dA82pOMQNnCJMAsPG7AXG35VmCSMZsJHTFlTHizpKWQ=", "narHash": "sha256-BmO8d0r+BVlwWtMLQEYnwmngqdXIuyFzMwvmTcLMee8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "d6bb9f934f2870e5cbc5b94c79e9db22246141ff", "rev": "a1fddf0967c33754271761d91a3d921772b30d0e",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-23.11", "ref": "release-24.05",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1712588820, "lastModified": 1728909085,
"narHash": "sha256-y31s5idk3jMJMAVE4Ud9AdI7HT3CgTAeMTJ0StqKN7Y=", "narHash": "sha256-WLxED18lodtQiayIPDE5zwAfkPJSjHJ35UhZ8h3cJUg=",
"owner": "NixOs", "owner": "NixOs",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d272ca50d1f7424fbfcd1e6f1c9e01d92f6da167", "rev": "c0b1da36f7c34a7146501f684e9ebdf15d2bebf8",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOs", "owner": "NixOs",
"ref": "nixos-23.11", "ref": "nixos-24.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1711703276, "lastModified": 1722555339,
"narHash": "sha256-iMUFArF0WCatKK6RzfUJknjem0H9m4KgorO/p3Dopkk=", "narHash": "sha256-uFf2QeW7eAHlYXuDktm9c25OxOyCoUOQmh5SZ9amE5Q=",
"owner": "NixOS", "type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1728888510,
"narHash": "sha256-nsNdSldaAyu6PE3YUA+YQLqUDJh+gRbBooMMekZJwvI=",
"owner": "NixOs",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d8fe5e6c92d0d190646fb9f1056741a229980089", "rev": "a3c0b3b21515f74fd2665903d4ce6bc4dc81c77c",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOs",
"ref": "nixos-unstable", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixprof": {
"inputs": {
"flake-utils": "flake-utils_3",
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1680079910,
"narHash": "sha256-8KH3mZZVNB9rf42jSsllsJcs06JVxzgYkvmGgbSkMlI=",
"owner": "Kha",
"repo": "nixprof",
"rev": "8a36221436d1a0f336ba8432dd8ffebbb82c3b29",
"type": "github"
},
"original": {
"owner": "Kha",
"repo": "nixprof",
"type": "github"
}
},
"plasma-manager": {
"inputs": {
"home-manager": [
"home-manager"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1724556439,
"narHash": "sha256-gPR3sxkKxISUvydnqoj54znpUkK8av/HVFuFJuYUw3w=",
"owner": "nix-community",
"repo": "plasma-manager",
"rev": "5c97fe8af2a2e561f14195ed357d8c451fdbff4c",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "trunk",
"repo": "plasma-manager",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"agda": "agda", "agda": "agda",
"cornelis": "cornelis", "cornelis": "cornelis",
"flake-utils": "flake-utils_2",
"home-manager": "home-manager", "home-manager": "home-manager",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"ssbm-nix": "ssbm-nix" "nixpkgs-unstable": "nixpkgs-unstable",
} "nixprof": "nixprof",
}, "plasma-manager": "plasma-manager"
"slippi-desktop": {
"flake": false,
"locked": {
"lastModified": 1711346593,
"narHash": "sha256-WWgGRT58w1a4UcEe924hqa4ZVodQtsbXC44aCOEj528=",
"owner": "project-slippi",
"repo": "slippi-desktop-app",
"rev": "02f3f007cd03c6e2b0da57db65c90646efc04a86",
"type": "github"
},
"original": {
"owner": "project-slippi",
"repo": "slippi-desktop-app",
"type": "github"
}
},
"ssbm-nix": {
"inputs": {
"nixpkgs": "nixpkgs_2",
"slippi-desktop": "slippi-desktop"
},
"locked": {
"lastModified": 1712071998,
"narHash": "sha256-k95NCkXJ61PGMFuqyMtfvP3yTLozED/7DkN+lBWK0gs=",
"owner": "lytedev",
"repo": "ssbm-nix",
"rev": "eff966a97287d1d86b189d59a14bf744d86836b0",
"type": "github"
},
"original": {
"owner": "lytedev",
"repo": "ssbm-nix",
"type": "github"
} }
}, },
"systems": { "systems": {
@ -204,6 +265,21 @@
"repo": "default", "repo": "default",
"type": "github" "type": "github"
} }
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

165
flake.nix
View File

@ -1,82 +1,139 @@
{ {
description = "My various NixOs configurations"; description = "My various NixOS configurations";
inputs = { inputs = {
nixpkgs.url = "github:NixOs/nixpkgs/nixos-23.11"; nixpkgs.url = "github:NixOs/nixpkgs/nixos-24.05";
home-manager.url = "github:nix-community/home-manager/release-23.11"; nixpkgs-unstable.url = "github:NixOs/nixpkgs/nixos-unstable";
home-manager.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils";
agda.url = "github:agda/agda/v2.6.4.1"; home-manager = {
agda.inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/home-manager/release-24.05";
cornelis.url = "github:isovector/cornelis/"; inputs.nixpkgs.follows = "nixpkgs";
cornelis.inputs.nixpkgs.follows = "nixpkgs"; };
ssbm-nix.url = "github:lytedev/ssbm-nix"; agda = {
url = "github:agda/agda/v2.7.0";
inputs.nixpkgs.follows = "nixpkgs";
};
cornelis = {
url = "github:isovector/cornelis/";
inputs.nixpkgs.follows = "nixpkgs";
};
nixprof = {
url = "github:Kha/nixprof";
inputs.nixpkgs.follows = "nixpkgs-unstable";
};
plasma-manager = {
url = "github:nix-community/plasma-manager/trunk";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
}; };
outputs = { self, nixpkgs, home-manager, agda, cornelis, ssbm-nix }: outputs = { self, nixpkgs, nixpkgs-unstable, home-manager, agda, cornelis, plasma-manager, flake-utils, nixprof }:
let nix-config-module = let nix-config-module =
{ {
nix.registry.nixpkgs.flake = nixpkgs; nix.registry.nixpkgs.flake = nixpkgs;
nix.registry.unstable.flake = nixpkgs-unstable;
system.configurationRevision = nixpkgs.lib.mkIf (self ? rev) self.rev; system.configurationRevision = nixpkgs.lib.mkIf (self ? rev) self.rev;
}; };
rachel-home-module = home-module =
({ pkgs, ... }: system: config: {
let system = pkgs.stdenv.system;
in {
home-manager = { home-manager = {
sharedModules = [ plasma-manager.homeManagerModules.plasma-manager ];
useGlobalPkgs = true; useGlobalPkgs = true;
useUserPackages = true; useUserPackages = true;
users.rachel = import ./home/rachel.nix { users.${config.user} = import ./home-manager/all.nix {
pkgs = pkgs; pkgs = import nixpkgs {
agda = agda.packages.${system}.Agda; inherit system;
cornelis = cornelis.packages.${system}.cornelis; config.allowUnfree = true;
cornelis-vim = cornelis.packages.${system}.cornelis-vim; };
slippi-netplay = ssbm-nix.packages.${system}.slippi-netplay; unstable = import nixpkgs-unstable {
inherit system;
config.allowUnfree = true;
};
extra = {
agda = agda.packages.${system}.default;
cornelis = cornelis.packages.${system}.cornelis;
cornelis-vim = cornelis.packages.${system}.cornelis-vim;
rc2nix = plasma-manager.packages.${system}.rc2nix;
nixprof = nixprof.packages.${system}.nixprof;
sax2nf = self.packages.${system}.sax2nf;
bqn-vim = self.packages.${system}.bqn-vim;
bqn-nvim = self.packages.${system}.bqn-nvim;
shell-menu = self.packages.${system}.shell-menu;
pash = self.packages.${system}.pash;
cpypsk = self.packages.${system}.cpypsk;
renoise = self.packages.${system}.renoise;
wall = self.packages.${system}.wall;
protonmail-desktop = self.packages.${system}.protonmail-desktop;
eyezoom = self.packages.${system}.eyezoom;
};
inherit config;
}; };
}; };
} };
); user-system = import ./nixos/shared/user-system.nix;
in rec { graphical = import ./nixos/shared/graphical.nix;
graphical-with-conf = base: system: config: [
nix-config-module
home-manager.nixosModules.home-manager
base
(user-system system config)
(graphical system config)
(home-module system config)
];
in {
nixosConfigurations.lambda = nixpkgs.lib.nixosSystem { nixosConfigurations.lambda = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
modules = [ modules = graphical-with-conf ./nixos/lambda/configuration.nix system {
nix-config-module user = "rachel";
ssbm-nix.nixosModule steam = true;
./lambda/configuration.nix mcsr = false;
./shared/desktop.nix i3-plasma = true;
home-manager.nixosModules.home-manager };
rachel-home-module
];
}; };
nixosConfigurations.computational = nixpkgs.lib.nixosSystem { nixosConfigurations.transient = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
modules = [ modules = graphical-with-conf ./nixos/transient/configuration.nix system {
nix-config-module user = "rachel";
ssbm-nix.nixosModule steam = true;
./computational/configuration.nix mcsr = false;
./shared/desktop.nix i3-plasma = true;
home-manager.nixosModules.home-manager };
rachel-home-module
];
}; };
nixosConfigurations.cafe = nixpkgs.lib.nixosSystem { nixosConfigurations.computational = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux"; system = "x86_64-linux";
modules = [ modules = graphical-with-conf ./nixos/computational/configuration.nix system {
nix-config-module user = "rachel";
./cafe/host.nix steam = true;
]; mcsr = true;
i3-plasma = false;
virtualisation.forwardPorts = [ };
{ from = "host"; host.port = 80; guest.port = 8080; }
];
}; };
keyboardLayouts.fox = ./shared/fox.xkb; keyboardLayouts.fox = ./resources/fox.xkb;
keyboardLayouts.sus = ./resources/fox.xkb;
fonts.sax2nf = import ./shared/sax2nf.nix { pkgs = nixpkgs.legacyPackages.x86_64-linux; }; } // flake-utils.lib.eachDefaultSystem (system:
}; let pkgs = import nixpkgs {
inherit system;
config.allowUnfree = true;
};
in {
packages = rec {
bqn-vim = import ./pkgs/bqn-vim.nix { inherit pkgs; };
bqn-nvim = import ./pkgs/bqn-nvim.nix { inherit pkgs; };
sax2nf = import ./pkgs/sax2nf.nix { inherit pkgs; };
shell-menu = import ./pkgs/shell-menu.nix { inherit pkgs; };
pash = import ./pkgs/pash.nix { inherit pkgs; };
cpypsk = import ./pkgs/cpypsk.nix { inherit pkgs pash; };
renoise = import ./pkgs/renoise.nix { inherit pkgs; };
wall = import ./pkgs/wall.nix { inherit pkgs; };
protonmail-desktop = import ./pkgs/protonmail-desktop.nix { inherit pkgs; };
eyezoom = import ./pkgs/eyezoom.nix { inherit pkgs; };
};
});
} }

27
home-manager/all.nix Normal file
View File

@ -0,0 +1,27 @@
{ pkgs, unstable, extra, config, ... }:
let common = rec {
username = config.user;
homeDir = "/home/${username}";
};
in {
imports = builtins.map (x: import x { inherit pkgs unstable extra common config; }) ([
./applications.nix
./fetch.nix
./git.nix
./gpg.nix
./hm-settings.nix
./launcher.nix
./media.nix
./neovim.nix
./plasma.nix
./shell.nix
./ssh.nix
./terminal.nix
./tmux.nix
./xdg-dirs.nix
./xinitrc.nix
] ++ (if config.i3-plasma then [
./i3.nix
./picom.nix
] else []));
}

View File

@ -0,0 +1,89 @@
{ pkgs, unstable, extra, config, ... }:
{
home.packages = (with pkgs; [
unzip
zip
xz
gzip
bzip2
p7zip
usbutils
pciutils
nettools
nmap
arp-scan
julia-bin
(python3.withPackages (ps: with ps; [
ipython
matplotlib
numpy
scipy
]))
ghc
haskell-language-server
firefox
gnupg
discord
dig
xxd
slack
imagemagick
ffmpeg
yt-dlp
libreoffice
pass
protonvpn-gui
thunderbird
tidal-hifi
signal-desktop
transmission-gtk
xclip
clinfo
glxinfo
vulkan-tools
obs-studio
file
gimp
bat
steam
steam-run
rmapi
lutris
texlive.combined.scheme-full
zulip
rink
typst
ttyper
idris2
graalvm-ce
vimv
lean4
remmina
git-crypt
vcv-rack
nix-index
kdenlive
solaar
fzf
bottom
virt-manager-qt
wmctrl
]) ++ [
extra.agda
unstable.zoom-us
extra.sax2nf
extra.cornelis
unstable.kicad
extra.renoise
extra.nixprof
extra.protonmail-desktop
extra.pash
]
++ (if config.i3-plasma then [
pkgs.i3
pkgs.xwallpaper
] else [])
++ (if config.mcsr then [
pkgs.prismlauncher
] else []);
}

46
home-manager/fetch.nix Normal file
View File

@ -0,0 +1,46 @@
{ ... }:
{
programs.hyfetch = {
enable = true;
settings = {
preset = "lesbian";
mode = "rgb";
color_align = {
mode = "horizontal";
};
};
};
programs.fastfetch = {
enable = true;
settings = {
logo = {
type = "kitty-direct";
source = ../resources/fetch.png;
width = 32;
height = 16;
padding = {
top = 1;
left = 2;
right = 0;
};
};
modules = [
"break"
"title"
"break"
{ type = "host"; format = "{3}"; }
{ type = "os"; format = "{2}"; }
"de"
{ type = "wm"; format = "{2}"; }
"shell"
"kernel"
{ type = "cpu"; format = "{1}"; }
{ type = "gpu"; format = "{1} {2}"; }
{ type = "terminal"; format = "{5}"; }
"terminalfont"
"break"
"colors"
];
};
};
}

11
home-manager/git.nix Normal file
View File

@ -0,0 +1,11 @@
{ ... }:
{
programs.git = {
enable = true;
userName = "Rachel Lambda Samuelsson";
userEmail = "depsterr@protonmail.com";
extraConfig = {
init.defaultBranch = "master";
};
};
}

7
home-manager/gpg.nix Normal file
View File

@ -0,0 +1,7 @@
{ pkgs, ... }:
{
services.gpg-agent = {
enable = true;
pinentryPackage = pkgs.pinentry-qt;
};
}

View File

@ -0,0 +1,8 @@
{ common, ... }:
{
home = {
username = common.username;
homeDirectory = common.homeDir;
stateVersion = "24.05";
};
}

124
home-manager/i3.nix Normal file
View File

@ -0,0 +1,124 @@
{ extra, config, ... }:
{
home.file.".config/i3/config".text = ''
# i3 config file (v4)
gaps inner 10px
gaps outer 5px
default_border pixel 3
bindsym Mod4+r exec --no-startup-id rofi -show drun
bindsym Mod4+p exec --no-startup-id ${extra.cpypsk}
bindsym Mod4+Return exec --no-startup-id wezterm
bindsym Mod4+BackSpace exec --no-startup-id firefox
bindsym --release Mod4+s exec --no-startup-id slock
''
+
(if config.mcsr then ''
bindsym Mod1+Prior exec --no-startup-id ${extra.eyezoom} eye
bindsym Mod1+Next exec --no-startup-id ${extra.eyezoom} default
bindsym Mod1+Home exec --no-startup-id ${extra.eyezoom} wide
bindsym Mod1+End exec --no-startup-id ${extra.eyezoom} thin
'' else "")
+
''
# class border backgr. text indicator child_border
client.focused #d79921 #d79921 #d79921 #d79921 #d79921
client.focused_inactive #d79921 #d79921 #d79921 #d79921 #d79921
client.unfocused #b57614 #b57614 #b57614 #b57614 #b57614
client.urgent #cc241d #cc241d #cc241d #cc241d #cc241d
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle
floating_modifier Mod4
tiling_drag modifier titlebar
bindsym Mod4+Shift+q kill
bindsym Mod4+Shift+r restart
bindsym Mod4+t split toggle
bindsym Mod4+f fullscreen toggle
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
# switch to workspace
bindsym Mod4+1 workspace number $ws1
bindsym Mod4+2 workspace number $ws2
bindsym Mod4+3 workspace number $ws3
bindsym Mod4+4 workspace number $ws4
bindsym Mod4+5 workspace number $ws5
bindsym Mod4+6 workspace number $ws6
bindsym Mod4+7 workspace number $ws7
bindsym Mod4+8 workspace number $ws8
bindsym Mod4+9 workspace number $ws9
# move focused container to workspace
bindsym Mod4+Shift+1 move container to workspace number $ws1
bindsym Mod4+Shift+2 move container to workspace number $ws2
bindsym Mod4+Shift+3 move container to workspace number $ws3
bindsym Mod4+Shift+4 move container to workspace number $ws4
bindsym Mod4+Shift+5 move container to workspace number $ws5
bindsym Mod4+Shift+6 move container to workspace number $ws6
bindsym Mod4+Shift+7 move container to workspace number $ws7
bindsym Mod4+Shift+8 move container to workspace number $ws8
bindsym Mod4+Shift+9 move container to workspace number $ws9
bindsym Mod4+h focus left
bindsym Mod4+j focus down
bindsym Mod4+k focus up
bindsym Mod4+l focus right
bindsym Mod4+Shift+h move left
bindsym Mod4+Shift+j move down
bindsym Mod4+Shift+k move up
bindsym Mod4+Shift+l move right
bindsym Mod4+Control+h resize grow left
bindsym Mod4+Control+j resize grow down
bindsym Mod4+Control+k resize grow up
bindsym Mod4+Control+l resize grow right
# plasma stuff
exec --no-startup-id wmctrl -c Plasma
for_window [title="Desktop @*"] kill; floating enable; border none
exec --no-startup-id picom -b
for_window [class="plasmashell"] floating enable
for_window [class="Kmix"] floating enable; border none
for_window [class="systemsettings"] floating enable
for_window [class="spectacle"] floating enable
for_window [class="kruler"] floating enable; border none
for_window [class="Plasma"] floating enable; border none
for_window [class="Klipper"] floating enable; border none
for_window [class="krunner"] floating enable; border none
for_window [class="Plasmoidviewer"] floating enable; border none
for_window [title="plasma-desktop"] floating enable; border none
for_window [class="plasmashell" window_type="notification"] floating enable, border none
no_focus [class="plasmashell" window_type="notification"]
for_window [window_role="pop-up"] floating enable
for_window [window_role="bubble"] floating enable
for_window [window_role="task_dialog"] floating enable
for_window [window_role="Preferences"] floating enable
for_window [window_role="About"] floating enable
for_window [window_type="dialog"] floating enable
for_window [window_type="menu"] floating enable
for_window [instance="__scratchpad"] floating enable
exec --no-startup-id xwallpaper --focus ${extra.wall}
'';
}

View File

@ -0,0 +1,7 @@
{ ... }:
{
programs.rofi = {
enable = true;
theme = ../resources/rofi-theme/spotlight-dark.rasi;
};
}

11
home-manager/media.nix Normal file
View File

@ -0,0 +1,11 @@
{ ... }:
{
programs.mpv = {
enable = true;
config = {
hwdec = "auto-safe";
vo = "gpu";
profile = "gpu-hq";
};
};
}

189
home-manager/neovim.nix Normal file
View File

@ -0,0 +1,189 @@
{ pkgs, extra, ... }:
{
programs.neovim = {
defaultEditor = true;
enable = true;
vimAlias = true;
extraLuaConfig = ''
require('Comment').setup()
require('nvim-surround').setup()
require('numb').setup()
local lspcfg = require('lspconfig')
lspcfg.typst_lsp.setup({
cmd = { '${pkgs.typst-lsp}/bin/typst-lsp' },
})
lspcfg.rust_analyzer.setup({})
lspcfg.hls.setup({})
lspcfg.pyright.setup({
cmd = { '${pkgs.nodePackages.pyright}/bin/pyright-langserver', '--stdio' },
})
lspcfg.nixd.setup({
cmd = { '${pkgs.nixd}/bin/nixd' },
})
lspcfg.ltex.setup({
cmd = { '${pkgs.ltex-ls}/bin/ltex-ls' },
settings = {
ltex = {
language = 'auto'
}
}
})
lspcfg.clangd.setup({
cmd = { '${pkgs.clang-tools}/bin/clangd' },
})
lspcfg.ocamllsp.setup({})
lspcfg.purescriptls.setup({})
lspcfg.volar.setup({})
lspcfg.tsserver.setup({
init_options = {
plugins = {
{
name = "@vue/typescript-plugin",
location = "node_modules/@vue/typescript-plugin",
languages = {"javascript", "typescript", "vue"},
},
},
},
filetypes = {
"javascript",
"typescript",
"vue",
},
})
require('orgmode').setup({})
require('lean').setup({
mappings = true,
})
require('lualine').setup {
options = {
icons_enabled = true,
theme = 'gruvbox',
component_separators = { left = "", right = ""},
section_separators = { left = "", right = ""},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
}
},
sections = {
lualine_a = {'mode'},
lualine_b = { {
'diagnostics',
always_visible = true,
on_click = function(n,b,m)
vim.diagnostic.goto_next()
end
} },
lualine_c = {'filename'},
lualine_x = {'encoding', 'filetype'},
lualine_y = {'progress'},
lualine_z = {'location'}
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {'filename'},
lualine_x = {'location'},
lualine_y = {},
lualine_z = {}
},
}
vim.api.nvim_create_autocmd('LspAttach', {
callback = function(args)
local opts = { buffer = args.buf }
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', '<localleader>r', vim.lsp.buf.rename, opts)
vim.keymap.set('n', '<localleader>a', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', '<localleader>gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', '<localleader>gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<localleader>gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<localleader>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '<localleader>n', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<localleader>N', vim.diagnostic.goto_prev, opts)
vim.keymap.set('i', '<C-n>', vim.lsp.omnifunc, opts)
end,
})
vim.api.nvim_create_autocmd({ "BufNew"
, "TextChanged"
, "TextChangedI"
, "TextChangedP"
, "TextChangedT"
}, {
callback = function(args)
vim.diagnostic.disable(args.buf)
end
})
vim.api.nvim_create_autocmd({"BufWrite"}, {
callback = function(args)
vim.diagnostic.enable(args.buf)
end
})
'';
extraConfig = ''
set rnu nu
set ts=2 sw=2 expandtab
set clipboard=unnamedplus
set laststatus=3 noshowmode
set signcolumn=no
set linebreak
let g:cornelis_use_global_binary = 1
set conceallevel=2 concealcursor=nc
colorscheme gruvbox
hi Normal guibg=NONE ctermbg=NONE
let maplocalleader="!"
let g:bqn_prefix_key="!"
runtime agda-input.vim
call cornelis#bind_input(" ", "!")
call cornelis#bind_input("exc", "!")
inoremap <C-Space> <Esc>
nnoremap j gj
nnoremap k gk
nnoremap gj j
nnoremap gk k
au BufRead,BufNewFile *.agda call AgdaFiletype()
au BufRead,BufNewFile *.lagda.* call AgdaFiletype()
function! AgdaFiletype()
nnoremap <buffer> <localleader>l :CornelisLoad<CR>
nnoremap <buffer> <localleader>r :CornelisRefine<CR>
nnoremap <buffer> <localleader>c :CornelisMakeCase<CR>
nnoremap <buffer> <localleader>, :CornelisTypeContext<CR>
nnoremap <buffer> <localleader>. :CornelisTypeContextInfer<CR>
nnoremap <buffer> <localleader>d :CornelisTypeInfer<CR>
nnoremap <buffer> <localleader>s :CornelisSolve<CR>
nnoremap <buffer> <localleader>a :CornelisAuto<CR>
nnoremap <buffer> gd :CornelisGoToDefinition<CR>
nnoremap <buffer> <localleader>b :CornelisPrevGoal<CR>
nnoremap <buffer> <localleader>f :CornelisNextGoal<CR>
nnoremap <buffer> <localleader>u :CornelisIgnoreAbstract<CR>
nnoremap <buffer> <localleader><space> :CornelisGive<CR>
endfunction
'';
plugins = (with pkgs.vimPlugins; [
nvim-surround
comment-nvim
vimtex
gruvbox-nvim
nvim-lspconfig
idris2-vim
numb-nvim
typst-vim
orgmode
lean-nvim
lualine-nvim
]) ++ [
extra.cornelis-vim
extra.bqn-vim
extra.bqn-nvim
];
};
}

9
home-manager/picom.nix Normal file
View File

@ -0,0 +1,9 @@
{ ... }:
{
services.picom = {
enable = true;
backend = "glx";
settings.refresh-rate = "144";
vSync = false;
};
}

143
home-manager/plasma.nix Normal file
View File

@ -0,0 +1,143 @@
{ extra, config, ... }:
{
programs.plasma = {
enable = true;
overrideConfig = true;
workspace = {
lookAndFeel = "org.kde.breezedark.desktop";
} // (if config.i3-plasma then {} else {
wallpaper = "${extra.wall}";
});
kscreenlocker = {
appearance.wallpaper = "${extra.wall}";
};
hotkeys.commands = if config.i3-plasma then {} else ({
"launch-terminal" = {
name = "Launch terminal";
key = "Meta+Return";
command = "wezterm";
};
"cpypsk" = {
name = "Launch cpypsk";
key = "Meta+p";
command = "${extra.cpypsk}";
};
} // (if config.mcsr then {
"eye" = {
name = "eye zoom";
key = "Alt+PgUp";
command = "${extra.eyezoom} eye";
};
"default" = {
name = "default zoom";
key = "Alt+PgDown";
command = "${extra.eyezoom} default";
};
"thin" = {
name = "thin zoom";
key = "Alt+End";
command = "${extra.eyezoom} tiktok";
};
"wide" = {
name = "wide zoom";
key = "Alt+Home";
command = "${extra.eyezoom} wide";
};
} else {}));
fonts = {
general = {
family = "SAX2 Nerd Font";
pointSize = 10;
};
};
powerdevil = {
AC.whenLaptopLidClosed = "hibernate";
battery.whenLaptopLidClosed = "hibernate";
lowBattery.whenLaptopLidClosed = "hibernate";
};
panels = [
{
location = if config.i3-plasma then "top" else "bottom";
floating = true;
height = if config.i3-plasma then 36 else 44;
widgets = let
clock = {
digitalClock = {
calendar.firstDayOfWeek = "monday";
time.format = "24h";
};
};
spacer = {
name = "org.kde.plasma.panelspacer";
config = { General.expanding = true; };
};
nolaunchtasks = {
name = "org.kde.plasma.icontasks";
config = { General.launchers = [ ]; };
};
launchtasks = {
name = "org.kde.plasma.icontasks";
config = {
General.launchers = [
"applications:thunderbird.desktop"
"applications:org.wezfurlong.wezterm.desktop"
"applications:firefox.desktop"
"applications:discord.desktop"
];
};
};
kickoff = {
name = "org.kde.plasma.kickoff";
config = {
General.icon = "nix-snowflake-white";
};
};
systray = {
systemTray.items = {
shown = [
"org.kde.plasma.battery"
"org.kde.plasma.bluetooth"
"org.kde.plasma.networkmanagement"
"org.kde.plasma.volume"
];
};
};
in if config.i3-plasma then [
clock
spacer
nolaunchtasks
systray
] else [
kickoff
launchtasks
systray
clock
];
}
];
configFile."kcminputrc" = {
"Mouse"."X11LibInputXAccelProfileFlat" = true;
"Mouse"."XLbInptPointerAcceleration" = 0;
};
configFile."startkderc" = if config.i3-plasma then {
"General"."systemdBoot" = false; # needed to use i3 in place of KWin
} else {};
};
home.packages = [
extra.rc2nix
];
}

85
home-manager/shell.nix Normal file
View File

@ -0,0 +1,85 @@
{ pkgs, common, ... }:
{
programs.zsh = {
enable = true;
enableCompletion = false; # manage completions ourself
dotDir = ".config/zsh";
history.share = false;
shellAliases = {
x = "startx";
rm = "rm -i";
cal = "cal -m";
ls = "${pkgs.eza}/bin/eza --icons --color --git-repos";
cd = "z";
};
envExtra = ''
PROMPT=$'%B%n%b@%B%m%b: %~\nλ '
export BROWSER=firefox
export XINITRC="${common.homeDir}/bin/xinitrc"
export XAUTHORITY="${common.homeDir}/.local/share/Xauthority"
export PASH_KEYID="3E4A909C8FEF6E3783699C79DFC26EF8EDAD6D71"
export QT_AUTO_SCREEN_FACTOR=1
export PATH="${common.homeDir}/bin:$PATH"
'';
sessionVariables = {
DIRENV_LOG_FORMAT = "";
};
initExtra = ''
autoload -Uz compinit
compinit -C
(exec compinit &)
_comp_options+=(globdots)
setopt autocd
setopt noautomenu
setopt nomenucomplete
setopt TRANSIENT_RPROMPT
nix-subcommand() {
cmd="$1"
shift
pkgs=()
for pkg in "$@"; do
shift
[ "$pkg" = -- ] && break
[ "$pkg" = "''${pkg##*#}" ] && pkg="nixpkgs#$pkg"
pkgs+="$pkg"
done
export NIXPKGS_ALLOW_UNFREE=1 NIXPKGS_ALLOW_BROKEN=1
nix "$cmd" --impure "''${pkgs[@]}" -- "$@"
}
shell() { nix-subcommand "shell" "$@" }
run() { nix-subcommand "run" "$@" }
build() { nix-subcommand "build" "$@" }
KEYTIMEOUT=1
MODE_INDICATOR_VICMD='%K{10}%F{8}%B NORMAL %k%f%b'
MODE_INDICATOR_REPLACE='%K{9}%F{8}%B REPLACE %k%f%b'
MODE_INDICATOR_SEARCH='%K{13}%F{8}%B SEARCH %k%f%b'
MODE_INDICATOR_VISUAL='%K{12}%F{8}%B VISUAL %k%f%b'
MODE_INDICATOR_VLINE='%K{12}%F{8}%B V-LINE %k%f%b'
'';
plugins = [
{
name = "zsh-vim-mode";
file = "zsh-vim-mode.plugin.zsh";
src = pkgs.fetchFromGitHub {
owner = "softmoth";
repo = "zsh-vim-mode";
rev = "1f9953b7d6f2f0a8d2cb8e8977baa48278a31eab";
sha256 = "sha256-a+6EWMRY1c1HQpNtJf5InCzU7/RphZjimLdXIXbO6cQ=";
};
}
];
};
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
programs.zoxide = {
enable = true;
};
}

39
home-manager/ssh.nix Normal file
View File

@ -0,0 +1,39 @@
{ ... }:
{
programs.ssh = {
enable = true;
matchBlocks = {
remarkable = {
hostname = "10.11.99.1";
user = "root";
};
lazarus = {
hostname = "rachel.cafe";
user = "deppy";
};
zelda = {
hostname = "zelda.dhack.se";
user = "dhack";
};
link = {
hostname = "link.dhack.se";
user = "dhack";
};
medli = {
hostname = "pub.dhack.se";
user = "hacke";
port = 222;
};
makar = {
hostname = "pub.dhack.se";
user = "root";
port = 223;
};
ganon = {
hostname = "ganon.dhack.se";
user = "lambda";
port = 222;
};
};
};
}

View File

@ -0,0 +1,9 @@
{ ... }:
{
programs.wezterm = {
enable = true;
enableBashIntegration = false;
enableZshIntegration = false;
extraConfig = builtins.readFile ./wezterm.lua;
};
}

56
home-manager/tmux.nix Normal file
View File

@ -0,0 +1,56 @@
{ pkgs, ... }:
{
programs.tmux = {
enable = true;
clock24 = true;
escapeTime = 0;
keyMode = "vi";
mouse = false;
shortcut = "a";
extraConfig = ''
bind h split -hb -c '#{pane_current_path}'
bind j split -v -c '#{pane_current_path}'
bind k split -vb -c '#{pane_current_path}'
bind l split -h -c '#{pane_current_path}'
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?\.?(view|n?vim?x?)(-wrapped)?(diff)?$'"
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
bind-key -T copy-mode-vi 'C-h' select-pane -L
bind-key -T copy-mode-vi 'C-j' select-pane -D
bind-key -T copy-mode-vi 'C-k' select-pane -U
bind-key -T copy-mode-vi 'C-l' select-pane -R
bind -n 'M-h' if-shell "$is_vim" 'send-keys M-h' 'resize-pane -L 1'
bind -n 'M-j' if-shell "$is_vim" 'send-keys M-j' 'resize-pane -D 1'
bind -n 'M-k' if-shell "$is_vim" 'send-keys M-k' 'resize-pane -U 1'
bind -n 'M-l' if-shell "$is_vim" 'send-keys M-l' 'resize-pane -R 1'
bind-key -T copy-mode-vi M-h resize-pane -L 1
bind-key -T copy-mode-vi M-j resize-pane -D 1
bind-key -T copy-mode-vi M-k resize-pane -U 1
bind-key -T copy-mode-vi M-l resize-pane -R 1
set -g pane-border-style bg=default
set -g pane-border-style fg="#1D1F21"
set -g pane-active-border-style bg=default
set -g pane-active-border-style fg="#333333"
set-option -g status on
set-option -g status-style bg=default
set-option -g status-style fg="#ef7627"
set-option -g status-interval 2
set-option -g status-justify "centre"
set-option -g status-right " λ "
set -g status-interval 1
set-window-option -g window-status-separator "-"
set-window-option -g window-status-current-format " #[fg=#b55690 bold]!![ #{b:pane_current_path}/ ] #{b:window_index} $ #{b:pane_current_command}!! "
set-window-option -g window-status-format " #{b:window_index} [ #{b:pane_current_path}/ ] #{b:pane_current_command} "
'';
};
}

95
home-manager/wezterm.lua Normal file
View File

@ -0,0 +1,95 @@
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
act = wezterm.action
config.color_scheme = 'Gruvbox dark, hard (base16)'
config.use_fancy_tab_bar = false
config.hide_tab_bar_if_only_one_tab = true
config.force_reverse_video_cursor = true
config.window_padding = {
left = 4,
right = 4,
top = 4,
bottom = 4,
}
config.inactive_pane_hsb = {
saturation = 0.9,
brightness = 0.8,
}
config.window_background_opacity = 0.95
config.colors = { tab_bar = { background = 'rgba(29, 32, 33, 95%)' } }
font = wezterm.font_with_fallback {
'SAX2 Nerd Font',
'Fira Code',
'Noto Mono',
}
config.font = font
config.font_rules = {
{
italic = true,
font = font,
}
}
config.adjust_window_size_when_changing_font_size = false
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 700 }
config.keys = {
{
key = 'a',
mods = 'LEADER|CTRL',
action = act.SendKey { key = 'a', mods = 'CTRL' },
},
{
key = 'c',
mods = 'LEADER',
action = act.SpawnTab "CurrentPaneDomain",
},
{
key = 'n',
mods = 'LEADER',
action = act.ActivateTabRelative(1),
},
{
key = 'p',
mods = 'LEADER',
action = act.ActivateTabRelative(-1),
},
}
for i = 1, 8 do
table.insert(config.keys, {
key = tostring(i),
mods = 'ALT',
action = act.ActivateTab(i - 1),
})
end
for key, dir in pairs({ h = 'Left', j = 'Down', k = 'Up', l = 'Right' }) do
table.insert(config.keys, {
key = key,
mods = 'ALT',
action = act.AdjustPaneSize { dir, 1 },
})
table.insert(config.keys, {
key = key,
mods = 'CTRL',
action = act.ActivatePaneDirection(dir),
})
table.insert(config.keys, {
key = key,
mods = 'LEADER',
action = act.SplitPane { direction = dir },
})
end
return config

15
home-manager/xdg-dirs.nix Normal file
View File

@ -0,0 +1,15 @@
{ common, ... }:
{
xdg.userDirs = {
enable = true;
createDirectories = true;
desktop = "${common.homeDir}";
documents = "${common.homeDir}/doc";
download = "${common.homeDir}/dwn";
music = "${common.homeDir}/music";
pictures = "${common.homeDir}/img";
publicShare = "${common.homeDir}/srv";
templates = "${common.homeDir}/doc/templates";
videos = "${common.homeDir}/vid";
};
}

29
home-manager/xinitrc.nix Normal file
View File

@ -0,0 +1,29 @@
{ extra, config, ... }:
{
home.file."bin/xinitrc" = {
executable = true;
text = ''
#!/bin/sh -e
cd "$HOME"
if test -z "$DBUS_SESSION_BUS_ADDRESS"; then
eval $(dbus-launch --exit-with-session --sh-syntax)
fi
systemctl --user import-environment DISPLAY XAUTHORITY
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
dbus-update-activation-environment DISPLAY XAUTHORITY
fi
''
+
(if config.i3-plasma then ''
xwallpaper --focus ${extra.wall}
export KDEWM=i3
'' else "")
+
''
exec startplasma-x11
'';
};
}

View File

@ -1,6 +0,0 @@
#!/bin/sh
berryc resize_button 3
berryc resize_mask mod4
berryc set_font "SAX2 Nerd Font"
berryc edge_gap 0 40 0 0

View File

@ -1,10 +0,0 @@
#!/usr/bin/env bash
msgTag="lightdunst"
brightnessctl set "$1"
light="$(brightnessctl -m | cut -d, -f4)"
dunstify -a "changeLight" -u low \
-h string:x-dunst-stack-tag:$msgTag \
-h int:value:"$light" "Brightness: $light"

View File

@ -1,97 +0,0 @@
[bar/bar]
modules-right = tray pulseaudio battery date
modules-left = ewmh
modules-center = polywin
padding-right = 15px
padding-left = 10px
bottom = true
height = 40px
background = #99000000
font-0 = "SAX2 Nerd Font:size=16;3"
enable-ipc = true
[module/date]
type = internal/date
date = %Y-%m-%d
time = %H:%M
label = %date% %time%
label-padding-left = 5px
[module/ewmh]
type = internal/xworkspaces
backgound-color = #999999
pin-workspaces = true
enable-click = true
icon-0 = 0; ◉
icon-1 = 1; ◉
icon-2 = 2; ◉
icon-3 = 3; ◉
icon-default =
label-active = %icon%
label-occupied = %icon%
label-empty = %icon%
label-active-padding = 0.7
label-occupied-padding = 0.7
label-empty-padding = 0.7
label-active-foreground = #fff
label-occupied-foreground = #999
label-empty-foreground = #999
[module/battery]
type = internal/battery
full-at = 99
low-at = 10
battery = BAT0
adapter = AC
poll-interval = 5
format-full = <ramp-capacity>
format-charging = <ramp-capacity>
format-discharging = <ramp-capacity>
format-full-padding = 15px
format-charging-padding = 15px
format-discharging-padding = 15px
ramp-capacity-0 =
ramp-capacity-1 =
ramp-capacity-2 =
ramp-capacity-3 =
ramp-capacity-4 =
[module/pulseaudio]
type = internal/pulseaudio
use-ui-max = false
format-volume = <ramp-volume>
label-muted = 󰖁
; Only applies if <ramp-volume> is used
ramp-volume-0 = 󰕿
ramp-volume-1 = 󰖀
ramp-volume-2 = 󰕾
[module/tray]
type = internal/tray
format-margin = 8px
tray-spacing = 8px
[module/polywin]
type = custom/script
exec = ~/.config/polybar/scripts/polywin.sh
format = <label>
label = %output%
label-padding = 1
interval = 1

View File

@ -1,701 +0,0 @@
{ pkgs, cornelis, cornelis-vim, agda, slippi-netplay, ... }:
let username = "rachel";
homeDir = "/home/${username}";
SAX2NF = import ../shared/sax2nf.nix { inherit pkgs; };
hpkgs = pkgs.haskellPackages;
hls_wrapper = pkgs.writeScript "hls" ''
export PATH="${hpkgs.haskell-language-server}/bin:$PATH"
exec ${hpkgs.haskell-language-server}/bin/haskell-language-server-wrapper "$@"
'';
rzk = hpkgs.rzk;
vol = pkgs.writeScript "vol" (builtins.readFile ./vol.sh);
light = pkgs.writeScript "light" (builtins.readFile ./light.sh);
in rec {
home = {
username = username;
homeDirectory = homeDir;
packages = with pkgs; [
unzip
zip
xz
gzip
bzip2
p7zip
usbutils
pciutils
nettools
nmap
arp-scan
julia-bin
(python3.withPackages (ps: with ps; [
ipython
matplotlib
numpy
scipy
]))
hpkgs.ghc
firefox
gnupg
agda
discord
dig
xxd
zoom-us
slack
imagemagick
ffmpeg
sl
cowsay
lolcat
fortune
banner
yt-dlp
libreoffice
protonmail-bridge
pass
protonvpn-cli_2
thunderbird
tidal-hifi
signal-desktop
transmission-gtk
xclip
clinfo
glxinfo
vulkan-tools
obs-studio
file
gimp
SAX2NF
twemoji-color-font
bat
steam
steam-run
rmapi
lutris
texlive.combined.scheme-full
cornelis
zulip
rink
sage
typst
ttyper
idris2
prismlauncher
vimv
rzk
whalebird
lean4
slippi-netplay
xwallpaper
blueberry
pulseaudio
brightnessctl
maim
];
file.".config/berry/autostart" = {
source = ./berry_config;
};
file.".config/polybar/scripts/polywin.sh" = {
source = pkgs.writeScript "polywin.sh" ''
PATH="$PATH:${pkgs.lib.makeBinPath [
pkgs.wmctrl
pkgs.gawk
pkgs.coreutils-full
]}"
current_display=$(wmctrl -d 2>/dev/null |awk '/*/ {print $1}')
out=$(
wmctrl -lx 2>/dev/null |
awk -v current_display="$current_display" '{
if ($2==current_display) {
split($3,window_title,".")
printf "%s ", "["tolower(window_title[2])"]"
}
}'
)
# workaround for clearing on empty output
printf '%s\n' "$out"
'';
executable = true;
};
stateVersion = "23.11";
};
xdg.userDirs = {
enable = true;
createDirectories = true;
desktop = "${homeDir}";
documents = "${homeDir}/doc";
download = "${homeDir}/dwn";
music = "${homeDir}/music";
pictures = "${homeDir}/img";
publicShare = "${homeDir}/srv";
templates = "${homeDir}/doc/templates";
videos = "${homeDir}/vid";
};
programs = {
bash = {
enable = true;
enableCompletion = false;
historyFile = "/dev/null";
sessionVariables = {
PS1 ="\\033[1m\\u\\033[0m@\\033[1m\\h\\033[0m: \\w\nλ ";
BROWSER = "firefox";
XINITRC = "${homeDir}/bin/xinitrc";
XAUTHORITY = "${homeDir}/.local/share/Xauthority";
PASH_KEYID = "3E4A909C8FEF6E3783699C79DFC26EF8EDAD6D71";
QT_AUTO_SCREEN_FACTOR = 1;
PATH = "${homeDir}/bin:$PATH";
};
shellAliases = {
x = "startx";
rm = "rm -i";
cal = "cal -m";
};
initExtra = ''
source ~/.profile
set -o vi
norm_name() {
ret="$1"
[ "$ret" = "''${ret#*\#}" ] && ret="nixpkgs#$ret"
printf '%s\n' "$ret"
}
run() {
prog="$1"
shift
nix run "$(norm_name $prog)" "$@"
}
shell() {
i=0
while [ $i -lt $# ]; do
prog="$1"
shift
set -- "$@" "$(norm_name $prog)"
: $(( i++ ))
done
nix shell "$@"
}
'';
};
mpv = {
enable = true;
config = {
hwdec = "auto-safe";
vo = "gpu";
profile = "gpu-hq";
};
};
rofi = {
enable = true;
theme = "gruvbox-dark-soft";
};
git = {
enable = true;
userName = "Rachel Lambda Samuelsson";
userEmail = "depsterr@protonmail.com";
extraConfig = {
init.defaultBranch = "master";
};
};
neovim = {
defaultEditor = true;
enable = true;
vimAlias = true;
extraLuaConfig = ''
require('tmux').setup({ copy_sync = { redirect_to_clipboard = true } });
require('Comment').setup()
require('nvim-surround').setup()
require('numb').setup()
local lspcfg = require('lspconfig')
lspcfg.typst_lsp.setup({
cmd = { '${pkgs.typst-lsp}/bin/typst-lsp' },
})
lspcfg.rust_analyzer.setup({})
lspcfg.hls.setup({
cmd = { '${hls_wrapper}', 'lsp' },
})
lspcfg.pyright.setup({
cmd = { '${pkgs.nodePackages.pyright}/bin/pyright-langserver', '--stdio' },
})
lspcfg.nixd.setup({
cmd = { '${pkgs.nixd}/bin/nixd' },
})
lspcfg.ltex.setup({
cmd = { '${pkgs.ltex-ls}/bin/ltex-ls' },
filetypes = { 'bib', 'gitcommit', 'markdown', 'plaintext', 'tex', 'pandoc', 'typst' },
settings = {
ltex = {
language = 'en-US'
}
}
})
lspcfg.clangd.setup({
cmd = { '${pkgs.clang-tools}/bin/clangd' },
})
lspcfg.ocamllsp.setup({})
require('orgmode').setup_ts_grammar()
require('nvim-treesitter.configs').setup({
highlight = {
enable = true,
disable = { "c", "lua" },
additional_vim_regex_highlighting = {'org'},
},
})
require('orgmode').setup({})
require('lean').setup({
mappings = true,
})
require('lualine').setup {
options = {
icons_enabled = true,
theme = 'gruvbox',
component_separators = { left = "", right = ""},
section_separators = { left = "", right = ""},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
}
},
sections = {
lualine_a = {'mode'},
lualine_b = { {
'diagnostics',
always_visible = true,
on_click = function(n,b,m)
vim.diagnostic.goto_next()
end
} },
lualine_c = {'filename'},
lualine_x = {'encoding', 'filetype'},
lualine_y = {'progress'},
lualine_z = {'location'}
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {'filename'},
lualine_x = {'location'},
lualine_y = {},
lualine_z = {}
},
}
vim.api.nvim_create_autocmd('LspAttach', {
callback = function(args)
local opts = { buffer = args.buf }
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', '<localleader>r', vim.lsp.buf.rename, opts)
vim.keymap.set('n', '<localleader>a', vim.lsp.buf.code_action, opts)
vim.keymap.set('n', '<localleader>gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', '<localleader>gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', '<localleader>gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<localleader>e', vim.diagnostic.open_float, opts)
vim.keymap.set('n', '<localleader>n', vim.diagnostic.goto_next, opts)
vim.keymap.set('n', '<localleader>N', vim.diagnostic.goto_prev, opts)
vim.keymap.set('i', '<C-n>', vim.lsp.omnifunc, opts)
end,
})
vim.api.nvim_create_autocmd({ "BufNew"
, "TextChanged"
, "TextChangedI"
, "TextChangedP"
, "TextChangedT"
}, {
callback = function(args)
vim.diagnostic.disable(args.buf)
end
})
vim.api.nvim_create_autocmd({"BufWrite"}, {
callback = function(args)
vim.diagnostic.enable(args.buf)
end
})
vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, {
pattern = { "*.rzk" },
callback = function(arg)
vim.lsp.start({
name = 'rzk-lsp',
cmd = { "${rzk}/bin/rzk", "lsp" },
root_dir = vim.fs.dirname(vim.fs.find('rzk.yaml', { upward = true })[1]),
})
end
})
'';
extraConfig = ''
set rnu nu
set ts=2 sw=2 expandtab
set clipboard=unnamedplus
set laststatus=3 noshowmode
set signcolumn=no
set linebreak
let g:cornelis_use_global_binary = 1
set conceallevel=2 concealcursor=nc
colorscheme gruvbox
hi Normal guibg=NONE ctermbg=NONE
let maplocalleader="!"
let g:bqn_prefix_key="!"
runtime agda-input.vim
call cornelis#bind_input(" ", "!")
call cornelis#bind_input("exc", "!")
inoremap <C-Space> <Esc>
nnoremap j gj
nnoremap k gk
nnoremap gj j
nnoremap gk k
au BufRead,BufNewFile *.agda call AgdaFiletype()
au BufRead,BufNewFile *.lagda.* call AgdaFiletype()
function! AgdaFiletype()
nnoremap <buffer> <C-c><C-l> :CornelisLoad<CR>
nnoremap <buffer> <C-c><C-r> :CornelisRefine<CR>
nnoremap <buffer> <C-c><C-c> :CornelisMakeCase<CR>
nnoremap <buffer> <C-c>, :CornelisTypeContext<CR>
nnoremap <buffer> <C-c>. :CornelisTypeContextInfer<CR>
nnoremap <buffer> <C-c><C-d> :CornelisTypeInfer<CR>
nnoremap <buffer> <C-c><C-s> :CornelisSolve<CR>
nnoremap <buffer> <C-c><C-a> :CornelisAuto<CR>
nnoremap <buffer> gd :CornelisGoToDefinition<CR>
nnoremap <buffer> <C-c><C-b> :CornelisPrevGoal<CR>
nnoremap <buffer> <C-c><C-f> :CornelisNextGoal<CR>
nnoremap <buffer> <C-c><C-u> :CornelisIgnoreAbstract<CR>
nnoremap <buffer> <C-c><space> :CornelisGive<CR>
endfunction
'';
plugins = let
bqn-vim = pkgs.vimUtils.buildVimPlugin {
name = "bqn-vim";
src = "${pkgs.fetchFromGitHub {
owner = "mlochbaum";
repo = "BQN";
rev = "f4b09b675386c789c8296c96874871916a3abdcf";
hash = "sha256-rvsageS5sYF9QvWuoRutjx5i0ngrfhGvIPRO834pwwM=";
}}/editors/vim";
};
bqn-nvim = pkgs.vimUtils.buildVimPlugin {
name = "bqn-nvim";
src = pkgs.fetchFromSourcehut {
owner = "~detegr";
repo = "nvim-bqn";
rev = "52d8b49f3ebc32d340e2e2b8dba1f6bbd1873b78";
hash = "sha256-5wITedTuUn9BKLqmQtPWeFNOa8dXfPIRpUvPSkNJcas=";
};
};
in
with pkgs.vimPlugins; [
nvim-surround
comment-nvim
vimtex
gruvbox-nvim
tmux-nvim
cornelis-vim
nvim-lspconfig
idris2-vim
numb-nvim
typst-vim
orgmode
(nvim-treesitter.withPlugins (p: with p; [
org
]))
vim-obsession
lean-nvim
bqn-vim
bqn-nvim
lualine-nvim
];
};
tmux = {
enable = true;
clock24 = true;
escapeTime = 0;
keyMode = "vi";
mouse = false;
shortcut = "a";
extraConfig = ''
bind h split -hb -c '#{pane_current_path}'
bind j split -v -c '#{pane_current_path}'
bind k split -vb -c '#{pane_current_path}'
bind l split -h -c '#{pane_current_path}'
is_vim="ps -o state= -o comm= -t '#{pane_tty}' | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?\.?(view|n?vim?x?)(-wrapped)?(diff)?$'"
bind-key -n 'C-h' if-shell "$is_vim" 'send-keys C-h' 'select-pane -L'
bind-key -n 'C-j' if-shell "$is_vim" 'send-keys C-j' 'select-pane -D'
bind-key -n 'C-k' if-shell "$is_vim" 'send-keys C-k' 'select-pane -U'
bind-key -n 'C-l' if-shell "$is_vim" 'send-keys C-l' 'select-pane -R'
bind-key -T copy-mode-vi 'C-h' select-pane -L
bind-key -T copy-mode-vi 'C-j' select-pane -D
bind-key -T copy-mode-vi 'C-k' select-pane -U
bind-key -T copy-mode-vi 'C-l' select-pane -R
bind -n 'M-h' if-shell "$is_vim" 'send-keys M-h' 'resize-pane -L 1'
bind -n 'M-j' if-shell "$is_vim" 'send-keys M-j' 'resize-pane -D 1'
bind -n 'M-k' if-shell "$is_vim" 'send-keys M-k' 'resize-pane -U 1'
bind -n 'M-l' if-shell "$is_vim" 'send-keys M-l' 'resize-pane -R 1'
bind-key -T copy-mode-vi M-h resize-pane -L 1
bind-key -T copy-mode-vi M-j resize-pane -D 1
bind-key -T copy-mode-vi M-k resize-pane -U 1
bind-key -T copy-mode-vi M-l resize-pane -R 1
set -g pane-border-style bg=default
set -g pane-border-style fg="#1D1F21"
set -g pane-active-border-style bg=default
set -g pane-active-border-style fg="#333333"
set-option -g status on
set-option -g status-style bg=default
set-option -g status-style fg="#ef7627"
set-option -g status-interval 2
set-option -g status-justify "centre"
set-option -g status-right " λ "
set -g status-interval 1
set-window-option -g window-status-separator "-"
set-window-option -g window-status-current-format " #[fg=#b55690 bold]!![ #{b:pane_current_path}/ ] #{b:window_index} $ #{b:pane_current_command}!! "
set-window-option -g window-status-format " #{b:window_index} [ #{b:pane_current_path}/ ] #{b:pane_current_command} "
set -g @resurrect-strategy-nvim 'session'
set -g @resurrect-capture-pane-contents 'on'
'';
plugins = with pkgs.tmuxPlugins; [
resurrect
];
};
hyfetch = {
enable = true;
settings = {
preset = "lesbian";
mode = "rgb";
color_align = {
mode = "horizontal";
};
};
};
direnv = {
enable = true;
nix-direnv.enable = true;
};
alacritty = {
enable = true;
settings = {
window = {
padding.x = 5;
padding.y = 5;
decoration = "none";
};
dynamic_title = false;
mouse_hide_when_typing = true;
draw_bold_text_with_bright_colors = false;
scrolling.history = 0;
font = {
normal.family = "SAX2 Nerd Font";
size = 8;
};
colors = {
background = "#1d1f21";
foreground = "#c5c8c6";
};
shell.program =
let tmux-menu = pkgs.writeScript "tmux-menu" ''
s="$(tmux ls 2>/dev/null)"
[ "$s" ] && s="$s
"
c=$(${pkgs.fzf}/bin/fzf -1 <<-EOF
''${s}New Session
Raw Shell
EOF
) || exit
case "$c" in
"New Session")
read -p "Name? " -r n
${pkgs.tmux}/bin/tmux new -s "$n" ;;
"Raw Shell")
${pkgs.bash}/bin/bash --login ;;
*)
${pkgs.tmux}/bin/tmux attach-session -t "''${c%%:*}" ;;
esac
''; in "${tmux-menu}";
};
};
ssh = {
enable = true;
matchBlocks = {
remarkable = {
hostname = "10.11.99.1";
user = "root";
};
lazarus = {
hostname = "rachel.cafe";
user = "deppy";
};
};
};
autorandr = {
enable = true;
hooks.postswitch = {
wall = "xwallpaper --zoom \"$HOME\"/img/wallpaper";
bar = "systemctl restart --user polybar";
};
profiles = {
};
};
};
services = {
gpg-agent = {
enable = true;
pinentryFlavor = "qt";
};
sxhkd = {
enable = true;
package = pkgs.sxhkd;
extraOptions = [ "-m 1" ];
keybindings = {
"super + Return" = "alacritty";
"super + BackSpace" = "firefox";
"super + r" = "rofi -show drun";
"super + p" = "cpypsk";
"super + l" = "betterlockscreen -l";
"super + q" = "berryc window_close";
"super + Left" = "berryc snap_left";
"super + Right" = "berryc snap_right";
"super + m" = "berryc window_monocle";
"super + {1,2,3,4}" = "berryc switch_workspace {0,1,2,3}";
"super + shift + {1,2,3,4}" = "berryc send_to_workspace {0,1,2,3}";
"super + f" = "berryc fullscreen_state";
"alt + Tab" = "berryc cycle_focus";
"~button1" = "berryc pointer_focus";
"~button2" = "berryc pointer_focus";
"~button3" = "berryc pointer_focus";
"~Escape" = "dunstctl close-all";
"Print" = "maim -s ~/img/scrot/$(date +%s).png";
"XF86AudioMute" = "${vol} mute";
"XF86AudioRaiseVolume" = "${vol} +5%";
"XF86AudioLowerVolume" = "${vol} -5%";
"XF86MonBrightnessUp" = "${light} 5%+";
"XF86MonBrightnessDown" = "${light} 5%-";
};
};
polybar = {
enable = true;
config = ./polybar.ini;
script = "polybar bar &";
package = pkgs.polybarFull;
};
picom = {
enable = true;
};
dunst = {
enable = true;
settings = {
volume = {
appname = "changeVolume";
history_ignore = "yes";
};
light = {
appname = "changeLight";
history_ignore = "yes";
};
};
};
redshift = {
enable = true;
latitude = "57.70";
longitude = "11.97";
};
network-manager-applet.enable = true;
blueman-applet.enable = true;
betterlockscreen.enable = true;
gnome-keyring.enable = true;
autorandr.enable = true;
};
xsession = {
enable = true;
initExtra = ''
xwallpaper --zoom "$HOME"/img/wallpaper
'';
scriptPath = "bin/xinitrc";
windowManager.command = "${pkgs.berry}/bin/berry";
};
systemd.user= {
timers = {
battery-check = {
Unit.Description = "Warn at low battery levels";
Timer = {
OnBootSec = "1min";
OnUnitActiveSec = "30s";
Unit = "battery-check.service";
};
Install.WantedBy = [ "graphical-session.target" ];
};
};
services = {
battery-check = {
Unit.Description = "Warn at low battery levels";
Service = let batMon = pkgs.writeShellScript "batMon" ''
PATH="$PATH:${pkgs.lib.makeBinPath [
pkgs.acpi
pkgs.dunst
pkgs.gnugrep
pkgs.gawk
pkgs.systemd
]}"
acpi -b | grep "Battery 0" | awk -F'[,:%]' '{print $2, $3}' | {
read -r status capacity
if [ "$status" = Discharging -a "$capacity" -le 2 ]; then
dunstify -u critical -a batMon \
-h string:x-dunst-stack-tag:batMon \
-h int:value:"$capacity" "Battery Critical: ''${capacity}%
Hibernating"
sleep 5
systemctl hibernate
elif [ "$status" = Discharging -a "$capacity" -le 5 ]; then
dunstify -u critical -a batMon \
-h string:x-dunst-stack-tag:batMon \
-h int:value:"$capacity" "Battery Critical: ''${capacity}%"
fi
}
'';
in {
ExecStart = "${batMon}";
};
};
};
};
}

View File

@ -1,23 +0,0 @@
#!/usr/bin/env bash
msgTag="voldunst"
case "$1" in
mute)
pactl set-sink-mute @DEFAULT_SINK@ toggle > /dev/null
;;
*)
pactl set-sink-volume @DEFAULT_SINK@ "$1" > /dev/null
;;
esac
volume="$(pactl get-sink-volume @DEFAULT_SINK@ | head -1 | awk '{ print $5 }')"
mute="$(pactl get-sink-mute @DEFAULT_SINK@ | cut -d' ' -f2)"
if [[ $volume == "0%" || "$mute" == "yes" ]]; then
dunstify -a "changeVolume" -u low \
-h string:x-dunst-stack-tag:$msgTag "Volume muted"
else
dunstify -a "changeVolume" -u low \
-h string:x-dunst-stack-tag:$msgTag \
-h int:value:"$volume" "Volume: ${volume}"
fi

View File

@ -0,0 +1,74 @@
{ config, pkgs, ... }:
{
# [HARDWARE]
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
# [BOOT]
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.swraid.enable = true;
boot.swraid.mdadmConf = ''
ARRAY /dev/md/deppyPC:0 level=raid0 num-devices=2 metadata=1.2 name=deppyPC:0 UUID=ba6fef6e:972796a3:a331c87a:2d973f91
devices=/dev/sda1,/dev/sdb1
'';
# [AUDIO]
services.pipewire.wireplumber.extraConfig = {
"alsa-monitor.conf" = {
enabled = true;
rules = [
{
matches = [
{
"node.name" = "alsa_output.usb-SMSL_SMSL_USB_AUDIO-00.analog-stereo";
}
];
actions = {
update-props = {
audio.format = "S32_LE";
};
};
}
];
};
};
services.pipewire.extraConfig.pipewire = {
"10-clock-rate" = {
"context.properties" = {
"default.clock.allowed-rates" = [ 44100 48000 88200 96000 176400 192000 352800 384000 705600 768000 ];
"default.clock.quantum" = 1024;
"default.clock.min-quantum" = 128;
"default.clock.max-quantum" = 2048;
};
};
"11-upmix" = {
"stream.properties" = {
"channel.upmix" = true;
};
};
};
# [Fix KWIN locking to 60Hz]
environment.sessionVariables = {
KWIN_X11_NO_SYNC_TO_VBLANK = 1;
KWIN_X11_REFRESH_RATE = 144000;
KWIN_X11_FORCE_SOFTWARE_VSYNC = 1;
};
# [NETWORKING]
networking.hostName = "computational";
networking.networkmanager.enable = true;
system.stateVersion = "24.05";
}

View File

@ -5,6 +5,7 @@
[ # Include the results of the hardware scan. [ # Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
]; ];
hardware.opengl = { hardware.opengl = {
enable = true; enable = true;
driSupport = true; driSupport = true;
@ -19,7 +20,6 @@
]; ];
}; };
hardware.bluetooth.enable = true; hardware.bluetooth.enable = true;
services.blueman.enable = true;
services.logind = { services.logind = {
lidSwitch = "hibernate"; lidSwitch = "hibernate";
lidSwitchDocked = "ignore"; lidSwitchDocked = "ignore";
@ -28,34 +28,6 @@
services.udev.extraRules = '' services.udev.extraRules = ''
KERNEL=="0000:00:14.0", SUBSYSTEM=="pci", ATTR{power/wakeup}="disabled" KERNEL=="0000:00:14.0", SUBSYSTEM=="pci", ATTR{power/wakeup}="disabled"
''; '';
services.tlp = {
enable = true;
settings = {
TLP_DEFAULT_MODE = "BAT";
DISK_IDLE_SECS_ON_AC = 0;
DISK_IDLE_SECS_ON_BAT = 5;
MAX_LOST_WORK_SECS_ON_AC = 15;
MAX_LOST_WORK_SECS_ON_BAT = 120;
CPU_SCALING_GOVERNOR_ON_AC = "auto";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_SCALING_MIN_FREQ_ON_AC = 400000;
CPU_SCALING_MAX_FREQ_ON_AC = 4700000;
CPU_SCALING_MIN_FREQ_ON_BAT = 400000;
CPU_SCALING_MAX_FREQ_ON_BAT = 2700000;
CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 30;
CPU_BOOST_ON_AC = 1;
CPU_BOOST_ON_BAT = 0;
SCHED_POWERSAVE_ON_AC = 0;
SCHED_POWERSAVE_ON_BAT = 1;
NMI_WATCHDOG = 0;
DISK_DEVICES = "nvme0n1";
};
};
# [BOOT / DISK ENCRYPTION] # [BOOT / DISK ENCRYPTION]
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
@ -64,7 +36,7 @@
device = "nodev"; device = "nodev";
efiSupport = true; efiSupport = true;
enableCryptodisk = true; enableCryptodisk = true;
theme = ../shared/sayonara; theme = ../../resources/grub-theme;
}; };
boot.loader.efi.efiSysMountPoint = "/boot/efi"; boot.loader.efi.efiSysMountPoint = "/boot/efi";
@ -80,7 +52,6 @@
}; };
}; };
}; };
boot.kernelParams = [ "i915.enable_dpcd_backlight=1" ];
# [NETWORKING] # [NETWORKING]
networking.hostName = "lambda"; networking.hostName = "lambda";
@ -91,12 +62,5 @@
wifi.macAddress = "random"; wifi.macAddress = "random";
}; };
# [DESKTOP / XORG / WAYLAND] system.stateVersion = "24.05";
services.xserver = {
windowManager.berry.enable = true;
displayManager.startx.enable = true;
dpi = 144;
};
system.stateVersion = "23.11";
} }

View File

@ -0,0 +1,48 @@
system: config: { pkgs, ... }:
{
# [DESKTOP / XORG / WAYLAND]
services.libinput = {
enable = true;
touchpad = {
naturalScrolling = true;
accelProfile = "flat" ;
tapping = false;
};
};
services.xserver = {
enable = true;
displayManager.startx.enable = true;
};
services.desktopManager.plasma6.enable = true;
programs.slock.enable = config.i3-plasma;
# [SOUND]
sound.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
jack.enable = true;
wireplumber.enable = true;
};
programs.virt-manager.enable = true;
virtualisation.libvirtd.enable = true;
programs.gamemode = {
enable = config.steam;
settings.general.renice = 20;
};
programs.steam.enable = config.steam;
nixpkgs.config.allowUnfree = true;
hardware.logitech.wireless.enable = true;
}

View File

@ -1,20 +1,5 @@
{ pkgs, ... }: system: config: { pkgs, ... }:
{ {
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
PermitRootLogin = "no";
};
};
# [NFS]
fileSystems."/home/rachel/music" = {
device = "rachel.cafe:/srv/music";
fsType = "nfs";
options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=60" ];
};
# [LOCALE] # [LOCALE]
time.timeZone = "Europe/Stockholm"; time.timeZone = "Europe/Stockholm";
i18n.defaultLocale = "en_GB.UTF-8"; i18n.defaultLocale = "en_GB.UTF-8";
@ -23,14 +8,14 @@
# [NIX] # [NIX]
nix = { nix = {
settings = { settings = {
bash-prompt = "\\033[1m\\u\\033[0m@\\033[1m\\h\\033[0m: \\w\\n\\040"; bash-prompt = "\\033[1m\\u\\033[0m@\\033[1m\\h\\033[0m: \\w\\n\\040";
experimental-features = [ "nix-command" "flakes" ]; experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true; auto-optimise-store = true;
}; };
gc = { gc = {
automatic = true; automatic = true;
dates = "monthly"; dates = "weekly";
options = "--delete-older-than 30d"; options = "--delete-older-than 7d";
}; };
registry = { registry = {
templates = { templates = {
@ -46,87 +31,51 @@
}; };
}; };
nixpkgs.config.allowUnfree = true; # [NFS]
nixpkgs.config.permittedInsecurePackages = [ fileSystems."/home/${config.user}/music" = {
"electron-21.4.4" # needed for whalebird device = "rachel.cafe:/srv/music";
]; fsType = "nfs";
options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=60" ];
};
fileSystems."/mnt/eta" =
let secrets = import ../../secrets/eta.nix;
in {
device = "//192.168.30.33/users";
fsType = "cifs";
options = [ "username=${secrets.etaUser}" "password=${secrets.etaPass}" "uid=1000" "gid=1000" "x-systemd.automount" "noauto" "x-systemd.idle-timeout=60" ];
};
# [DESKTOP / XORG / WAYLAND]
services.xserver = { services.xserver = {
enable = true;
xkb = { xkb = {
layout = "fox,sus"; layout = "fox,sus";
options = "ctrl:nocaps"; options = "ctrl:nocaps";
extraLayouts.sus = { extraLayouts.sus = {
description = "Swedish US"; description = "Swedish US";
languages = [ "se" ]; languages = [ "se" ];
symbolsFile = ../shared/sus.xkb; symbolsFile = ../../resources/sus.xkb;
}; };
extraLayouts.fox = { extraLayouts.fox = {
description = "Layout suitable to be used by a fox"; description = "Layout suitable to be used by a fox";
languages = [ "se" ]; languages = [ "se" ];
symbolsFile = ../shared/fox.xkb; symbolsFile = ../../resources/fox.xkb;
};
};
libinput = {
enable = true;
touchpad = {
naturalScrolling = true;
accelProfile = "flat" ;
tapping = false;
}; };
}; };
}; };
# [PACKAGES / PROGRAMS]
environment.systemPackages = with pkgs; [
git
git-crypt
neovim
];
# [TTY] # [TTY]
console = { console = {
useXkbConfig = true; useXkbConfig = true;
font = "LatGrkCyr-12x22"; font = "LatGrkCyr-12x22";
}; };
# [SOUND]
sound.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
jack.enable = true;
wireplumber.enable = true;
};
# [PACKAGES / PROGRAMS]
environment.systemPackages = with pkgs; [
git
neovim
];
programs.gamemode = {
enable = true;
settings.general.renice = 20;
};
programs.steam.enable = true;
ssbm.gcc = {
rules.enable = true;
oc-kmod.enable = true;
};
# [SERVICES]
services.printing.enable = true;
virtualisation.docker.enable = true;
# [SECURITY / FIREWALL]
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [ 22 ];
networking.firewall.allowedUDPPorts = [ ];
security.doas = { security.doas = {
enable = true; enable = true;
extraRules = [{ extraRules = [{
@ -137,8 +86,10 @@
}]; }];
}; };
# [USER] # [USER]
users.users.rachel = { users.users.${config.user} = {
isNormalUser = true; isNormalUser = true;
shell = pkgs.zsh;
ignoreShellProgramCheck = true;
extraGroups = [ extraGroups = [
"wheel" "wheel"
"networkmanager" "networkmanager"
@ -146,11 +97,23 @@
"input" "input"
"audio" "audio"
"docker" "docker"
"libvirtd"
]; ];
}; };
# Done for gamemoderun # Done for gamemoderun
security.pam.loginLimits = [ security.pam.loginLimits = [
{ domain = "rachel"; item = "nice"; "type" = "soft"; value = "-20"; } { domain = "${config.user}"; item = "nice"; "type" = "soft"; value = "-20"; }
{ domain = "rachel"; item = "nice"; "type" = "hard"; value = "-20"; } { domain = "${config.user}"; item = "nice"; "type" = "hard"; value = "-20"; }
]; ];
# [SERVICES]
services.printing.enable = true;
virtualisation.docker.enable = true;
services.mullvad-vpn.enable = true;
# [SECURITY / FIREWALL]
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [ 22 ];
networking.firewall.allowedUDPPorts = [ ];
} }

View File

@ -0,0 +1,43 @@
# 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, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# HW
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
extraPackages = with pkgs; [
intel-ocl
intel-compute-runtime
intel-media-driver
vaapiIntel
vaapiVdpau
libvdpau-va-gl
];
};
hardware.bluetooth.enable = true;
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "transient";
networking.networkmanager = {
enable = true;
wifi.powersave = true;
wifi.scanRandMacAddress = true;
wifi.macAddress = "random";
};
system.stateVersion = "24.05"; # Did you read the comment?
}

View File

@ -0,0 +1,41 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/b8c4fa67-322b-46a7-9fe9-8dc5d020f891";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/A4F2-F615";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices =
[ { device = "/dev/disk/by-uuid/dc2f5eb3-3447-4ae6-adc9-790adee78555"; }
];
# 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
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

10
pkgs/bqn-nvim.nix Normal file
View File

@ -0,0 +1,10 @@
{ pkgs, ... }:
pkgs.vimUtils.buildVimPlugin {
name = "bqn-nvim";
src = pkgs.fetchFromSourcehut {
owner = "~detegr";
repo = "nvim-bqn";
rev = "52d8b49f3ebc32d340e2e2b8dba1f6bbd1873b78";
hash = "sha256-5wITedTuUn9BKLqmQtPWeFNOa8dXfPIRpUvPSkNJcas=";
};
}

10
pkgs/bqn-vim.nix Normal file
View File

@ -0,0 +1,10 @@
{ pkgs, ... }:
pkgs.vimUtils.buildVimPlugin {
name = "bqn-vim";
src = "${pkgs.fetchFromGitHub {
owner = "mlochbaum";
repo = "BQN";
rev = "f4b09b675386c789c8296c96874871916a3abdcf";
hash = "sha256-rvsageS5sYF9QvWuoRutjx5i0ngrfhGvIPRO834pwwM=";
}}/editors/vim";
}

13
pkgs/cpypsk.nix Normal file
View File

@ -0,0 +1,13 @@
{ pkgs, pash, ... }:
pkgs.writeScript "cpypsk" ''
#!/bin/sh
D="''${PASH_DIR:-$HOME/.local/share/pash}"
D="''${D%/}"
for f in "$D"/*.gpg; do
n="''${f#$D/}"
n="''${n%.gpg}"
printf '%s\n' "$n"
done | ${pkgs.rofi}/bin/rofi -dmenu | xargs ${pash}/bin/pash copy
''

44
pkgs/eyezoom.nix Normal file
View File

@ -0,0 +1,44 @@
{ pkgs, ... }:
pkgs.writeScript "eyezoom" ''
arg="$1"
set -- $(
${pkgs.xorg.xrandr}/bin/xrandr |
${pkgs.gawk}/bin/awk -F "[x+ ]" '/primary/ { print $4" "$5" "$6" "$7 }'
)
W="$1"
H="$2"
offx="$3"
offy="$4"
ZH=16384
ZW=1920
WDIV=4
WIDEDIV=2
mouse="pointer:pulsar X2H Mini"
normalaccel=0
zoomaccel=-0.9
case "$arg" in
eye)
${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$(( offx - (ZW / 2) + (W / 2) )),$(( offy - (ZH / 2) + (H / 2) )),$ZW,$ZH
xinput set-prop "$mouse" "libinput Accel Speed" $zoomaccel
;;
tiktok)
${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$(( offx - ((W/WDIV)/2) + (W/2))),$offy,$((W/WDIV)),$H
xinput set-prop "$mouse" "libinput Accel Speed" $normalaccel
;;
wide)
${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$offx,$(( offy - ((H / WIDEDIV) / 2) + (H / 2) )),$W,$((H/WIDEDIV))
xinput set-prop "$mouse" "libinput Accel Speed" $normalaccel
;;
*)
${pkgs.wmctrl}/bin/wmctrl -R ':ACTIVE:' -e 0,$offx,$offy,$W,$H
xinput set-prop "$mouse" "libinput Accel Speed" $normalaccel
;;
esac
''

15
pkgs/pash.nix Normal file
View File

@ -0,0 +1,15 @@
{ pkgs, ... }:
pkgs.stdenv.mkDerivation {
name = "pash";
src = pkgs.fetchFromGitHub {
owner = "rachelambda";
repo = "pash";
rev = "5fa05003ec63256dce2d6071a33f254439096e94";
hash = "sha256-AFAvtLWMWRSdRxZB3Mo9U9TD/x0s4m8tZMt7M3tRVlM=";
};
phases = [ "installPhase" ];
installPhase = ''
mkdir -p $out/bin
install -Dm755 $src/pash $out/bin/pash
'';
}

View File

@ -0,0 +1,63 @@
{ pkgs, ... }:
let mainProgram = "proton-mail";
srcHashes = {
universal-darwin = "sha256-JfZwHFp0aZtHcbP7tyG7uqFs2w+LWKfnfyuxxpxDJZ8=";
x86_64-linux = "sha256-En5vkTHYtwN6GMgbtyhzsPqknOPRO9KlTqZfbBFaIFQ=";
};
in
pkgs.stdenv.mkDerivation rec {
pname = mainProgram;
version = "1.0.5";
nativeBuildInputs = [
pkgs.makeWrapper
]
++ pkgs.lib.optional pkgs.stdenv.isLinux pkgs.dpkg
++ pkgs.lib.optional pkgs.stdenv.isDarwin pkgs.unzip;
src = pkgs.fetchurl {
url =
if pkgs.stdenv.isDarwin then
"https://github.com/ProtonMail/inbox-desktop/releases/download/${version}/Proton.Mail-darwin-universal-${version}.zip"
else
"https://github.com/ProtonMail/inbox-desktop/releases/download/${version}/proton-mail_${version}_amd64.deb";
sha256 =
{
x86_64-linux = srcHashes.x86_64-linux;
x86_64-darwin = srcHashes.universal-darwin;
aarch64-darwin = srcHashes.universal-darwin;
}
.${pkgs.stdenv.hostPlatform.system} or (throw "unsupported system ${pkgs.stdenv.hostPlatform.system}");
};
sourceRoot = pkgs.lib.optionalString pkgs.stdenv.isDarwin ".";
dontConfigure = true;
dontBuild = true;
installPhase =
let
darwin = ''
mkdir -p $out/{Applications,bin}
cp -r "Proton Mail.app" $out/Applications/
makeWrapper $out/Applications/"Proton Mail.app"/Contents/MacOS/Proton\ Mail $out/bin/protonmail-desktop
'';
linux = ''
runHook preInstall
mkdir -p $out
cp -r usr/share/ $out/
cp -r usr/lib/ $out/
'';
in
''
runHook preInstall
${if pkgs.stdenv.isDarwin then darwin else linux}
runHook postInstall
'';
preFixup = pkgs.lib.optionalString pkgs.stdenv.isLinux ''
makeWrapper ${pkgs.steam-run}/bin/steam-run $out/bin/${mainProgram} \
--add-flags "$out'/lib/proton-mail/Proton Mail Beta'"
'';
}

21
pkgs/renoise.nix Normal file
View File

@ -0,0 +1,21 @@
{ pkgs, ... }:
let
platforms = {
x86_64-linux = {
archSuffix = "x86_64";
hash = "sha256-b+YXBVnxu54HfC/tWapcs/ZYzwBOJswYbEbEU3SVNss=";
};
aarch64-linux = {
archSuffix = "arm64";
hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
};
};
platform = platforms.${pkgs.stdenv.system} or (throw "unsupported system ${pkgs.stdenv.hostPlatform.system}");
in
pkgs.renoise.overrideAttrs (final: prev: {
version = "3.4.4";
src = pkgs.fetchurl {
url = "https://files.renoise.com/demo/Renoise_3_4_4_Demo_Linux_${platform.archSuffix}.tar.gz";
hash = platform.hash;
};
})

20
pkgs/shell-menu.nix Normal file
View File

@ -0,0 +1,20 @@
{ pkgs, ... }:
pkgs.writeScript "tmux-menu" ''
s="$(${pkgs.tmux}/bin/tmux ls 2>/dev/null)"
[ "$s" ] && s="$s
"
c=$(${pkgs.fzf}/bin/fzf -1 <<-EOF
''${s}New Session
Raw Shell
EOF
) || exit
case "$c" in
"New Session")
read -p "Name? " -r n
${pkgs.tmux}/bin/tmux new -s "$n" ;;
"Raw Shell")
${pkgs.bashInteractive}/bin/bash --login ;;
*)
${pkgs.tmux}/bin/tmux attach-session -t "''${c%%:*}" ;;
esac
''

9
pkgs/wall.nix Normal file
View File

@ -0,0 +1,9 @@
{ pkgs, ... }:
pkgs.stdenv.mkDerivation {
name = "wallpaper.jpg";
src = ./..;
phases = [ "installPhase" ];
installPhase = ''
cp $src/resources/wallpaper.jpg $out
'';
}

View File

@ -3,6 +3,8 @@
My flake-based nixos configuration. My flake-based nixos configuration.
* `flake.nix`: flake defining configurations * `flake.nix`: flake defining configurations
* `home`: contains home-manager user configs * `hame-manager`: contains home-manager modules
* `lambda`: contains config for laptop * `nixos`: contains nixos configuration modules
* `shared`: contains assets shared accross installs * `pkgs`: contains derivations used by my config
* `resources`: contains files needed for other parts
* `secrets`: contains secret passwords using git-crypt

BIN
resources/fetch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -55,5 +55,7 @@ xkb_symbols "fox" {
key <AB09> {[ v, V, VoidSymbol, VoidSymbol ]}; key <AB09> {[ v, V, VoidSymbol, VoidSymbol ]};
key <AB10> {[ z, Z, VoidSymbol, VoidSymbol ]}; key <AB10> {[ z, Z, VoidSymbol, VoidSymbol ]};
key <SPCE> {[ space, space, space, space ]};
}; };

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,102 @@
/*******************************************************************************
* MACOS SPOTLIGHT LIKE DARK THEME FOR ROFI
* User : LR-Tech
* Theme Repo : https://github.com/lr-tech/rofi-themes-collection
*******************************************************************************/
* {
font: "Montserrat 12";
bg0: #242424E6;
bg1: #7E7E7E80;
bg2: #0860f2E6;
fg0: #DEDEDE;
fg1: #FFFFFF;
fg2: #DEDEDE80;
background-color: transparent;
text-color: @fg0;
margin: 0;
padding: 0;
spacing: 0;
}
window {
background-color: @bg0;
location: center;
width: 640;
border-radius: 8;
}
inputbar {
font: "Montserrat 20";
padding: 12px;
spacing: 12px;
children: [ icon-search, entry ];
}
icon-search {
expand: false;
filename: "search";
size: 28px;
}
icon-search, entry, element-icon, element-text {
vertical-align: 0.5;
}
entry {
font: inherit;
placeholder : "Search";
placeholder-color : @fg2;
}
message {
border: 2px 0 0;
border-color: @bg1;
background-color: @bg1;
}
textbox {
padding: 8px 24px;
}
listview {
lines: 10;
columns: 1;
fixed-height: false;
border: 1px 0 0;
border-color: @bg1;
}
element {
padding: 8px 16px;
spacing: 16px;
background-color: transparent;
}
element normal active {
text-color: @bg2;
}
element alternate active {
text-color: @bg2;
}
element selected normal, element selected active {
background-color: @bg2;
text-color: @fg1;
}
element-icon {
size: 1em;
}
element-text {
text-color: inherit;
}

View File

@ -5,4 +5,5 @@ xkb_symbols "sus" {
key <AD11> {[ bracketleft, braceleft, aring, Aring ]}; key <AD11> {[ bracketleft, braceleft, aring, Aring ]};
key <AC10> {[ semicolon, colon, odiaeresis, Odiaeresis ]}; key <AC10> {[ semicolon, colon, odiaeresis, Odiaeresis ]};
key <AC11> {[ apostrophe, quatedbl, adiaeresis, Adiaeresis ]}; key <AC11> {[ apostrophe, quatedbl, adiaeresis, Adiaeresis ]};
key <SPCE> {[ space, space, space, space ]};
}; };

BIN
resources/wallpaper.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
secrets/eta.nix Normal file

Binary file not shown.