Compare commits

...

12 commits

15 changed files with 321 additions and 18 deletions

View file

@ -3,23 +3,17 @@
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
alacritty alacritty
discord discord
emacsPgtkGcc
feh feh
firefox firefox
flameshot
pavucontrol pavucontrol
slack slack
spotify spotify
sqlite # needed for org-roam
zathura zathura
]; ];
fonts.fonts = with pkgs; [
input-fonts
emacs-all-the-icons-fonts
];
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
programs.nm-applet.enable = true; programs.nm-applet.enable = true;
# NOTE: needed for home emacs configuration
nixpkgs.config.input-fonts.acceptLicense = true; nixpkgs.config.input-fonts.acceptLicense = true;
} }

View file

@ -14,10 +14,6 @@
AddKeysToAgent yes AddKeysToAgent yes
''; '';
}; };
tmux = {
enable = true;
baseIndex = 1;
};
}; };
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
@ -26,6 +22,7 @@
fd fd
ripgrep ripgrep
tree tree
packages.tmux-thumbs
wget wget
# development # development

View file

@ -67,12 +67,17 @@
home-manager.useGlobalPkgs = true; home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.users.alarsyo = import ./home; home-manager.users.alarsyo = import ./home;
home-manager.verbose = true;
} }
{ {
nixpkgs.overlays = [ nixpkgs.overlays = [
emacs-overlay.overlay emacs-overlay.overlay
(self: super: {
packages = import ./packages { pkgs = super; };
})
# uncomment this to build everything from scratch, fun but takes a # uncomment this to build everything from scratch, fun but takes a
# while # while
# #

View file

@ -1,5 +1,12 @@
{ ... }: { ... }:
{ {
imports = [
./emacs.nix
./flameshot.nix
./tmux.nix
./x
];
home.stateVersion = "20.09"; home.stateVersion = "20.09";
home.username = "alarsyo"; home.username = "alarsyo";

29
home/emacs.nix Normal file
View file

@ -0,0 +1,29 @@
{ config, lib, pkgs, ... }:
{
options.my.home.emacs = with lib; {
enable = mkEnableOption "Emacs daemon configuration";
};
config = lib.mkIf config.my.home.emacs.enable {
home.packages = with pkgs; [
sqlite # needed by org-roam
# fonts used by my config
input-fonts
emacs-all-the-icons-fonts
];
# make sure above fonts are discoverable
fonts.fontconfig.enable = true;
services.emacs = {
enable = true;
# generate emacsclient desktop file
client.enable = true;
};
programs.emacs = {
enable = true;
package = pkgs.emacsPgtkGcc;
};
};
}

13
home/flameshot.nix Normal file
View file

@ -0,0 +1,13 @@
{ config, lib, ... }:
let
cfg = config.my.home.flameshot;
in
{
options.my.home.flameshot = with lib; {
enable = mkEnableOption "flameshot autolaunch";
};
config.services.flameshot = lib.mkIf cfg.enable {
enable = true;
};
}

15
home/tmux.nix Normal file
View file

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
cfg = config.my.home.tmux;
in
{
options.my.home.tmux = with lib; {
enable = mkEnableOption "tmux dotfiles";
};
config.programs.tmux = lib.mkIf cfg.enable {
enable = true;
baseIndex = 1;
plugins = with pkgs; [ packages.tmux-thumbs ];
};
}

11
home/x/default.nix Normal file
View file

@ -0,0 +1,11 @@
{ config, lib, pkgs, ... }:
{
imports = [
./i3.nix
./i3bar.nix
];
options.my.home.x = with lib; {
enable = mkEnableOption "X server configuration";
};
}

121
home/x/i3.nix Normal file
View file

@ -0,0 +1,121 @@
{ config, lib, pkgs, ... }:
let
isEnabled = config.my.home.x.enable;
myTerminal =
# FIXME: fix when terminal is setup in home
# if config.my.home.terminal.program != null
if true
then "alacritty"
else "i3-sensible-terminal";
alt = "Mod1"; # `Alt` key
modifier = "Mod4"; # `Super` key
logoutMode = "[L]ogout, [S]uspend, [P]oweroff, [R]eboot";
# colors
colorBg = "#282828";
colorRed = "#cc241d";
colorGreen = "#98971a";
colorYellow = "#d79921";
colorBlue = "#458588";
colorPurple = "#b16286";
colorAqua = "#689d68";
colorGray = "#a89984";
colorDarkGray = "#1d2021";
in
{
config = lib.mkIf isEnabled {
my.home = {
flameshot.enable = true;
};
xsession.windowManager.i3 = {
enable = true;
config = {
inherit modifier;
bars =
let
barConfigPath =
config.xdg.configFile."i3status-rust/config-top.toml".target;
in
[
{
statusCommand = "i3status-rs ${barConfigPath}";
position = "top";
fonts = [ "DejaVu Sans Mono 9" ];
colors = {
background = colorBg;
statusline = colorYellow;
focusedWorkspace = {
border = colorAqua;
background = colorAqua;
text = colorDarkGray;
};
inactiveWorkspace = {
border = colorDarkGray;
background = colorDarkGray;
text = colorYellow;
};
activeWorkspace = {
border = colorAqua;
background = colorDarkGray;
text = colorYellow;
};
urgentWorkspace = {
border = colorRed;
background = colorRed;
text = colorBg;
};
};
}
];
focus = {
followMouse = true;
mouseWarping = true;
};
fonts = [
"DejaVu Sans Mono 8"
];
keybindings = lib.mkOptionDefault {
"${modifier}+Shift+e" = ''mode "${logoutMode}"'';
"${modifier}+i" = "exec emacsclient -c";
};
modes =
let
makeModeBindings = attrs: attrs // {
"Escape" = "mode default";
"Return" = "mode default";
};
in
{
${logoutMode} = makeModeBindings {
"l" = "exec --no-startup-id i3-msg exit, mode default";
"s" = "exec --no-startup-id systemctl suspend, mode default";
"p" = "exec --no-startup-id systemctl poweroff, mode default";
"r" = "exec --no-startup-id systemctl reboot, mode default";
};
};
startup = [
# FIXME: make it conditional on "nvidia" being part of video drivers
{
command = "nvidia-settings -a '[gpu:0]/GPUPowerMizerMode=1'";
notification = false;
}
];
terminal = myTerminal;
};
};
};
}

22
home/x/i3bar.nix Normal file
View file

@ -0,0 +1,22 @@
{ config, lib, pkgs, ... }:
let
isEnabled = config.my.home.x.enable;
in
{
config = lib.mkIf isEnabled {
home.packages = with pkgs; [
alsaUtils # Used by `sound` block
lm_sensors # Used by `temperature` block
];
programs.i3status-rust = {
enable = true;
bars = {
top = {
theme = "gruvbox-light";
};
};
};
};
}

View file

@ -10,6 +10,8 @@ in
imports = imports =
[ # Include the results of the hardware scan. [ # Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
./home.nix
]; ];
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
@ -38,7 +40,7 @@ in
# List services that you want to enable: # List services that you want to enable:
my.services = { my.services = {
wireguard = { wireguard = {
enable = true; enable = false;
iface = "wg"; iface = "wg";
port = 51820; port = 51820;
@ -69,11 +71,6 @@ in
layout = "fr"; layout = "fr";
xkbVariant = "us"; xkbVariant = "us";
}; };
emacs = {
enable = true;
package = pkgs.emacsPgtkGcc;
};
}; };
sound.enable = true; sound.enable = true;

9
hosts/boreal/home.nix Normal file
View file

@ -0,0 +1,9 @@
{ ... }:
{
home-manager.users.alarsyo = {
# Keyboard settings & i3 settings
my.home.x.enable = true;
my.home.emacs.enable = true;
my.home.tmux.enable = true;
};
}

4
packages/default.nix Normal file
View file

@ -0,0 +1,4 @@
{ pkgs }:
{
tmux-thumbs = pkgs.callPackage ./tmux-thumbs.nix {};
}

41
packages/fix.patch Normal file
View file

@ -0,0 +1,41 @@
diff --git a/src/swapper.rs b/src/swapper.rs
index aff33e1..cb5f21a 100644
--- a/src/swapper.rs
+++ b/src/swapper.rs
@@ -210,11 +210,10 @@ impl<'a> Swapper<'a> {
};
let pane_command = format!(
- "tmux capture-pane -t {active_pane_id} -p{scroll_params} | tail -n {height} | {dir}/target/release/thumbs -f '%U:%H' -t {tmp} {args}; tmux swap-pane -t {active_pane_id}; {zoom_command} tmux wait-for -S {signal}",
+ "tmux capture-pane -t {active_pane_id} -p{scroll_params} | tail -n {height} | @@replace-me@@/thumbs -f '%U:%H' -t {tmp} {args}; tmux swap-pane -t {active_pane_id}; {zoom_command} tmux wait-for -S {signal}",
active_pane_id = active_pane_id,
scroll_params = scroll_params,
height = self.active_pane_height.unwrap_or(i32::MAX),
- dir = self.dir,
tmp = TMP_FILE,
args = args.join(" "),
zoom_command = zoom_command,
diff --git a/tmux-thumbs.sh b/tmux-thumbs.sh
index 92d5625..c6300c7 100755
--- a/tmux-thumbs.sh
+++ b/tmux-thumbs.sh
@@ -35,4 +35,4 @@ add-param command string
add-param upcase-command string
add-param osc52 boolean
-"${CURRENT_DIR}/target/release/tmux-thumbs" "${PARAMS[@]}" || true
+@@replace-me@@ "${PARAMS[@]}" || true
diff --git a/tmux-thumbs.tmux b/tmux-thumbs.tmux
index 4fc9355..87c5346 100755
--- a/tmux-thumbs.tmux
+++ b/tmux-thumbs.tmux
@@ -8,9 +8,3 @@ THUMBS_KEY="$(tmux show-option -gqv @thumbs-key)"
THUMBS_KEY=${THUMBS_KEY:-$DEFAULT_THUMBS_KEY}
tmux bind-key "${THUMBS_KEY}" run-shell -b "${CURRENT_DIR}/tmux-thumbs.sh"
-
-BINARY="${CURRENT_DIR}/target/release/thumbs"
-
-if [ ! -f "$BINARY" ]; then
- tmux split-window "cd ${CURRENT_DIR} && cargo build --release --target-dir=target && echo 'Press any key to continue...' && read -k1"
-fi

38
packages/tmux-thumbs.nix Normal file
View file

@ -0,0 +1,38 @@
{ pkgs, lib, rustPlatform, fetchFromGitHub }:
let
pname = "tmux-thumbs";
version = "0.5.1";
tmux-thumbs-binary = rustPlatform.buildRustPackage {
pname = pname;
version = version;
src = fetchFromGitHub {
owner = "fcsonline";
repo = pname;
rev = version;
sha256 = "sha256-rU+tsrYJxoqF8Odh2ucvNekc+fLnSY6kFoVFUjqaTFE=";
};
cargoSha256 = "sha256-/F9tftRLqC6dk7lX41C8RUMqlrgzc0nkunc0rue5zuM=";
patches = [ ./fix.patch ];
postPatch = ''
substituteInPlace src/swapper.rs --replace '@@replace-me@@' '$out/bin/thumbs'
'';
meta = {};
};
in pkgs.tmuxPlugins.mkTmuxPlugin {
pluginName = pname;
version = version;
rtpFilePath = "tmux-thumbs.tmux";
src = fetchFromGitHub {
owner = "fcsonline";
repo = pname;
rev = version;
sha256 = "sha256-rU+tsrYJxoqF8Odh2ucvNekc+fLnSY6kFoVFUjqaTFE=";
};
patches = [ ./fix.patch ];
postInstall = ''
substituteInPlace $target/tmux-thumbs.sh --replace '@@replace-me@@' '${tmux-thumbs-binary}/bin/tmux-thumbs'
'';
}