mirror of
https://code.dumpstack.io/tools/appvm.git
synced 2024-11-27 10:31:31 +00:00
Merge branch 'master' of github.com:jollheef/appvm
This commit is contained in:
commit
555768d03b
16
.github/workflows/macos.yml
vendored
Normal file
16
.github/workflows/macos.yml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
name: macOS
|
||||||
|
|
||||||
|
on: [push]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: macOS-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Fetch dependencies
|
||||||
|
run: go get -d ./...
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: go build
|
16
.github/workflows/ubuntu.yml
vendored
Normal file
16
.github/workflows/ubuntu.yml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
name: Ubuntu
|
||||||
|
|
||||||
|
on: [push]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Build
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Fetch dependencies
|
||||||
|
run: go get -d ./...
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: go build
|
|
@ -47,7 +47,7 @@ You need to **relogin** if you install virt-manager (libvirt) first time.
|
||||||
$ appvm start chromium --verbose
|
$ appvm start chromium --verbose
|
||||||
$ # ... long wait for first time, because we need to collect a lot of packages
|
$ # ... long wait for first time, because we need to collect a lot of packages
|
||||||
|
|
||||||
You can customize local settings in `$GOPATH/code.dumpstack.io/tools/appvm/nix/local.nix`.
|
You can customize local settings in **~/.config/appvm/nix/local.nix**.
|
||||||
|
|
||||||
Default hotkey to release cursor: ctrl+alt.
|
Default hotkey to release cursor: ctrl+alt.
|
||||||
|
|
||||||
|
|
9
appvm.go
9
appvm.go
|
@ -106,11 +106,7 @@ func list(l *libvirt.Libvirt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range files {
|
for _, f := range files {
|
||||||
if f.Name() != "base.nix" &&
|
fmt.Println("\t", f.Name()[0:len(f.Name())-4])
|
||||||
f.Name() != "local.nix" &&
|
|
||||||
f.Name() != "local.nix.template" {
|
|
||||||
fmt.Println("\t", f.Name()[0:len(f.Name())-4])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,7 +260,6 @@ func stupidProgressBar() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func start(l *libvirt.Libvirt, name string, verbose bool) {
|
func start(l *libvirt.Libvirt, name string, verbose bool) {
|
||||||
// Currently binary-only installation is not supported, because we need *.nix configurations
|
|
||||||
appvmPath := configDir
|
appvmPath := configDir
|
||||||
|
|
||||||
// Copy templates
|
// Copy templates
|
||||||
|
@ -317,7 +312,7 @@ func autoBalloon(l *libvirt.Libvirt, memoryMin, adjustPercent uint64) {
|
||||||
table := tablewriter.NewWriter(os.Stdout)
|
table := tablewriter.NewWriter(os.Stdout)
|
||||||
table.SetHeader([]string{"Application VM", "Used memory", "Current memory", "Max memory", "New memory"})
|
table.SetHeader([]string{"Application VM", "Used memory", "Current memory", "Max memory", "New memory"})
|
||||||
for _, d := range domains {
|
for _, d := range domains {
|
||||||
if d.Name[0:5] == "appvm" {
|
if strings.HasPrefix(d.Name, "appvm_") {
|
||||||
name := d.Name[6:]
|
name := d.Name[6:]
|
||||||
|
|
||||||
memoryUsedRaw, err := ioutil.ReadFile(os.Getenv("HOME") + "/appvm/" + name + "/.memory_used")
|
memoryUsedRaw, err := ioutil.ReadFile(os.Getenv("HOME") + "/appvm/" + name + "/.memory_used")
|
||||||
|
|
30
base.nix.go
30
base.nix.go
|
@ -40,14 +40,6 @@ startup = do
|
||||||
spawn "${pkgs.spice-vdagent}/bin/spice-vdagent"
|
spawn "${pkgs.spice-vdagent}/bin/spice-vdagent"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
environment.systemPackages = [ pkgs.bc ];
|
|
||||||
services.cron = {
|
|
||||||
enable = true;
|
|
||||||
systemCronJobs = [
|
|
||||||
"* * * * * root free -m | grep Mem | awk '{print $2 \"-\" $4}' | bc > /home/user/.memory_used"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.services.home-user-build-xmonad = {
|
systemd.services.home-user-build-xmonad = {
|
||||||
description = "Link xmonad configuration";
|
description = "Link xmonad configuration";
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
|
@ -89,5 +81,27 @@ startup = do
|
||||||
};
|
};
|
||||||
wantedBy = ["timers.target"];
|
wantedBy = ["timers.target"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
systemd.services."autoballoon" = {
|
||||||
|
serviceConfig = {
|
||||||
|
StartLimitBurst = 100;
|
||||||
|
};
|
||||||
|
script = ''
|
||||||
|
${pkgs.procps}/bin/free -m | grep Mem | \
|
||||||
|
${pkgs.gawk}/bin/awk '{print $2 "-" $4}' | \
|
||||||
|
${pkgs.bc}/bin/bc > /home/user/.memory_used
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.timers."autoballoon" = {
|
||||||
|
description = "Auto update resolution crutch";
|
||||||
|
timerConfig = {
|
||||||
|
OnBootSec = "1s";
|
||||||
|
OnUnitInactiveSec = "1s";
|
||||||
|
Unit = "autoballoon.service";
|
||||||
|
AccuracySec = "1us";
|
||||||
|
};
|
||||||
|
wantedBy = ["timers.target"];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
`)
|
`)
|
||||||
|
|
1
xml.go
1
xml.go
|
@ -6,7 +6,6 @@ import "fmt"
|
||||||
// Believe me, you shouldn't.
|
// Believe me, you shouldn't.
|
||||||
|
|
||||||
func generateXML(name, vmNixPath, reginfo, img, sharedDir string) string {
|
func generateXML(name, vmNixPath, reginfo, img, sharedDir string) string {
|
||||||
// TODO: Define XML in go
|
|
||||||
return fmt.Sprintf(xmlTmpl, "appvm_"+name, vmNixPath, vmNixPath, vmNixPath,
|
return fmt.Sprintf(xmlTmpl, "appvm_"+name, vmNixPath, vmNixPath, vmNixPath,
|
||||||
reginfo, img, sharedDir, sharedDir, sharedDir)
|
reginfo, img, sharedDir, sharedDir, sharedDir)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue